Потоки Kafka для Центры событий Azure
В этой статье содержатся сведения о том, как нам использовать клиентская библиотека Kafka Streams с Центры событий Azure.
Примечание.
Функции Kafka Streams доступны только в общедоступной предварительной версии для центров событий Premium и выделенных уровней.
Обзор
Apache Kafka Streams — это только клиентская библиотека Java, которая предоставляет платформу для обработки потоковых данных и создания приложений в режиме реального времени для данных, хранящихся в разделах Kafka. Все обработка распространяется на клиента, а разделы Kafka являются хранилищем данных для промежуточных данных, прежде чем выходные данные записываются в целевой раздел.
Центры событий предоставляют конечную точку Kafka для использования с существующими клиентскими приложениями Kafka в качестве альтернативы запуску собственного кластера Kafka. Центры событий работают со многими из ваших существующих приложений Kafka. Дополнительные сведения см. в разделе Центры событий для Apache Kafka.
Использование Потоков Kafka с Центры событий Azure
Центры событий Azure изначально поддерживает протокол AMQP и Kafka. Однако для обеспечения совместимости поведения Kafka Streams некоторые параметры конфигурации по умолчанию необходимо обновить для клиентов Kafka.
Свойство | Поведение по умолчанию для Центров событий | Измененное поведение потоков Kafka | Описание |
---|---|---|---|
messageTimestampType |
задано значение AppendTime |
должно быть задано значение CreateTime |
Kafka Streams использует метку времени создания, а не метку времени добавления метки времени |
message.timestamp.difference.max.ms |
максимально допустимое значение — 90 дней | Свойство используется только для управления прошлыми метками времени. Для будущего времени задано значение 1 час и не может быть изменено. | Это соответствует спецификации протокола Kafka |
min.compaction.lag.ms |
Максимально допустимое значение — два дня | ||
Бесконечные разделы хранения | Усечение на основе размера 250 ГБ для каждой секции раздела | ||
Удаление API записей для бесконечных разделов хранения | Не реализовано. В качестве обходного решения можно обновить раздел и задать ограниченное время хранения. | Это будет сделано в общедоступной среде |
Другие вопросы
Ниже приведены некоторые из других соображений, которые следует учитывать.
- Клиентские приложения Kafka потоков должны быть предоставлены разрешения на управление, чтение и запись для всех пространств имен, чтобы иметь возможность создавать временные разделы для обработки потоков.
- Временные разделы и секции учитывают квоту для заданного пространства имен. Их следует учитывать при подготовке пространства имен или кластера.
- Бесконечное время хранения для хранилища Offset ограничено максимальным временем хранения сообщений номера SKU. Проверьте квоты центров событий для этих значений определенного уровня.
К ним относятся обновление конфигурации раздела в messageTimestampType
CreateTime
используемом (т. е. времени создания события) вместо AppendTime
времени добавления журнала(т. е. времени добавления журнала).
Чтобы переопределить поведение по умолчанию (обязательно), в Azure Resource Manager (ARM) необходимо задать приведенный ниже параметр.
Примечание.
Отображаются только определенные части шаблона ARM, чтобы выделить конфигурацию, которая должна быть обновлена.
{
"parameters": {
"namespaceName": "contoso-test-namespace",
"resourceGroupName": "contoso-resource-group",
"eventHubName": "contoso-event-hub-kafka-streams-test",
...
"parameters": {
"properties": {
...
"messageTimestampType": "CreateTime",
"retentionDescription": {
"cleanupPolicy": "Delete",
"retentionTimeInHours": -1,
"tombstoneRetentionTimeInHours": 1
}
}
}
}
}
Основные понятия Kafka Streams
Потоки Kafka предоставляют простой уровень абстракции через API производителя Kafka и потребителей, чтобы помочь разработчикам начать работу с сценариями потоковой передачи в режиме реального времени быстрее. Библиотека легкого веса зависит от брокера, совместимого с Apache Kafka (например, Центры событий Azure) для внутреннего уровня обмена сообщениями и управления отказоустойчивым локальным хранилищем состояний. С помощью API транзакций библиотека потоков Kafka поддерживает широкие возможности обработки, такие как только обработка и одна запись во время обработки.
Записи, поступающие из заказа, пользуются операциями окна на основе событий.
Примечание.
Мы рекомендуем ознакомиться с документацией Kafka Streams и основными понятиями Kafka Streams.
Потоки
Поток — это абстрактное представление темы Kafka. Он состоит из несвязанного, непрерывно обновляемого набора данных неизменяемых записей данных, где каждая запись данных является парой "ключ-значение".
Топология потоковой обработки
Приложение Kafka streams определяет вычислительную логику через DAG (направленный ациклический граф), представленный топологией процессора. Топология процессора состоит из потоковых процессоров (узлов в топологии), представляющих этап обработки, подключенный потоками (ребрами в топологии).
Потоковые процессоры могут быть связаны с вышестоящими процессорами или подчиненными процессорами, за исключением определенных особых случаев:
- Исходные процессоры . Эти процессоры не имеют вышестоящих процессоров и считываются из одного или нескольких потоков напрямую. Затем их можно связать с подчиненными процессорами.
- Процессоры приемника — эти процессоры не имеют подчиненных процессоров и должны записывать непосредственно в поток.
Топологию потоковой обработки можно определить с помощью DSL Kafka Streams или с помощью API процессора нижнего уровня.
Двойность потоков и таблиц
Потоки и таблицы являются 2 разными, но полезными абстракциями, предоставляемыми DSL Kafka Streams, моделированием временных рядов и реляционных форматов данных, которые должны сосуществовать для обработки потоковой обработки.
Kafka расширяет это дальше и представляет дуальность между потоками и таблицами, где
- Поток можно рассматривать как журнал изменений таблицы и
- Таблицуможно рассматривать как моментальный снимок последнего значения каждого ключа в потоке.
Эта двойность позволяет использовать таблицы и потоки взаимозаменяемо в соответствии с вариантом использования.
Например.
- Присоединение статических данных клиента (модельируется как таблица) с динамическими транзакциями (моделировается как поток) и
- Присоединение изменяющихся позиций портфеля в день трейдеров (моделировалось как поток) с последним каналом данных рынка (моделировался как поток).
Время
Kafka Streams позволяет выполнять прием и прием записей данных вне порядка и по-прежнему включаться в обработку. Чтобы обеспечить детерминированное поведение, существуют дополнительные понятия времени в потоках Kafka. Например:
- Время создания (также известное как "Время события") — это время возникновения события и создания записи данных.
- Время обработки — это время, когда запись данных обрабатывается приложением потоковой обработки (или когда оно используется).
- Время добавления (также известное как "Время создания") — это время хранения и фиксации данных в хранилище брокера Kafka. Это отличается от времени создания из-за разницы времени между созданием события и фактической приемом брокером.
Операции с отслеживанием состояния
Управление состоянием позволяет сложным приложениям потоковой обработки, таким как присоединение и агрегирование данных из разных потоков. Это достигается с помощью хранилищ состояний, предоставляемых Kafka Streams и доступ к которым осуществляется с помощью операторов с отслеживанием состояния в DSL Kafka Streams.
Преобразования с отслеживанием состояния в DSL включают:
- Объединение
- Присоединение
- Окно (в составе агрегатов и соединений)
- Применение пользовательских процессоров и преобразователей, которые могут быть отслеживанием состояния для интеграции API процессора
Окно и грейс
Операции с окном в DSL Kafka Streams позволяют разработчикам управлять группированием записей для заданного ключа для операций с отслеживанием состояния, таких как агрегаты и соединения.
Операции с окнами также позволяют спецификации льготного периода обеспечить некоторую гибкость для записей вне порядка для заданного окна. Запись, предназначенная для данного окна и прибывает после заданного окна, но в течение льготного периода принимается. Записи, поступающие после льготного периода, удаляются.
Приложения должны использовать элементы управления окнами и льготным периодом, чтобы повысить отказоустойчивость для записей вне порядка. Соответствующие значения зависят от рабочей нагрузки и должны быть определены эмпирически.
Гарантии обработки
Бизнес-и технические пользователи стремятся извлечь ключевые бизнес-аналитические сведения из выходных данных рабочих нагрузок потоковой обработки, которые преобразуются в высокие требования к гарантии транзакций. Потоки Kafka работают вместе с транзакциями Kafka, чтобы обеспечить гарантии обработки транзакций путем интеграции с совместимыми брокерами Kafka (например, Центры событий Azure) базовой системы хранения, чтобы гарантировать, что фиксации смещения и обновления хранилища состояний записываются атомарно.
Чтобы гарантировать гарантии обработки транзакций, processing.guarantee
параметр в конфигурации Kafka Streams должен быть обновлен из значения at_least_once
exactly_once_v2
по умолчанию (для клиентских версий в Apache Kafka 2.5) или exactly_once
(для клиентских версий до Apache Kafka 2.5.x).
Следующие шаги
В этой статье приведены ознакомительные сведения о Центрах событий для компонента Kafka. См. сведения в руководстве для разработчиков Apache Kafka по Центрам событий Azure.
Пошаговые инструкции по созданию концентратора событий и доступу к нему с помощью SAS или OAuth см. в статье Краткое руководство: потоковая передача данных с концентраторами событий с помощью протокола Kafka.
Кроме того, см . примеры OAuth на сайте GitHub.