Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержатся сведения о том, как использовать клиентскую библиотеку 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 Streams должны быть предоставлены разрешения на управление, чтение и запись для всех пространств имён, чтобы иметь возможность создавать временные темы для обработки потоков.
- Временные темы и разделы засчитываются в квоту для заданного пространства имен. Их следует учитывать при подготовке пространства имен или кластера.
- Теоретически неограниченное время удержания для хранилища "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 процессора нижнего уровня.
Двойность потоков и таблиц
Потоки и таблицы являются двумя разными, но полезными абстракциями, предоставляемыми Kafka Streams DSL, которые моделируют временные ряды и реляционные форматы данных, которым необходимо сосуществовать для потоковой обработки данных.
Kafka расширяет его дальше и представляет дуальность между потоками и таблицами, где
- Поток можно рассматривать как журнал изменений таблицы и
- Таблицуможно рассматривать как моментальный снимок последнего значения каждого ключа в потоке.
Эта двойность позволяет использовать таблицы и потоки взаимозаменяемо в соответствии с вариантом использования.
Например.
- Присоединение статических данных клиента (модельируется как таблица) с динамическими транзакциями (моделировается как поток) и
- Присоединение изменяющихся позиций портфеля в день трейдеров (моделировалось как поток) с последним каналом данных рынка (моделировался как поток).
Время
Kafka Streams позволяет использовать оконные и grace функции, чтобы данные, поступающие в неправильном порядке, могли быть приняты и включены в обработку. Чтобы обеспечить детерминированное поведение, существует больше понятий времени в потоках Kafka. К ним относятся:
- Время создания (также известное как "Время события") — это время возникновения события и создания записи данных.
- Время обработки — это время, когда запись данных обрабатывается приложением для потоковой обработки данных (или когда она потребляется).
- Время добавления (также известное как "Время создания") — это время хранения и фиксации данных в хранилище брокера Kafka. Он отличается от времени создания из-за разницы между временем создания события и фактическим приемом брокером.
Состояниеебые операции
Управление состоянием позволяет создавать сложные приложения для потоковой обработки, например, для присоединения и агрегации данных из разных потоков. Это достигается с помощью хранилищ состояний, предоставляемых Kafka Streams, к которым осуществляется доступ через операторы отслеживания состояния в Kafka Streams DSL.
Преобразования с сохранением состояния в DSL включают:
- Объединение
- Присоединение
- Окно (в составе агрегатов и соединений)
- Применение пользовательских процессоров и преобразователей, которые могут быть с сохранением состояния для интеграции API процессора
Окно и благодать
Операции с окном в DSL Kafka Streams позволяют разработчикам управлять группированием записей для заданного ключа для операций с отслеживанием состояния, таких как агрегаты и соединения.
Операции с окнами также позволяют указать льготный период, чтобы обеспечить некоторую гибкость для записей, поступающих не в порядке, в пределах заданного окна. Запись, предназначенная для определённого окна, и прибывающая после этого окна, но в течение льготного периода, принимается. Записи, поступающие после льготного периода, удаляются.
Приложения должны использовать оконные механизмы и управление льготными периодами, чтобы повысить отказоустойчивость для несортированных записей. Соответствующие значения зависят от рабочей нагрузки и должны быть определены эмпирически.
Гарантии обработки
Бизнес-и технические пользователи стремятся извлечь ключевые бизнес-аналитические сведения из выходных данных рабочих нагрузок потоковой обработки, которые преобразуются в высокие требования к гарантии транзакций. Потоки Kafka работают совместно с транзакциями Kafka для обеспечения гарантий транзакционной обработки. Они интегрируются с совместимыми с Kafka брокерами (такими как Azure Event Hubs) через их систему хранения для обеспечения атомарной записи фиксаций смещений и обновлений хранилища состояния.
Чтобы обеспечить гарантии обработки транзакций, параметр 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.