Поделиться через


Потоки 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. Проверьте квоты центров событий для этих значений определенного уровня.

К ним относятся обновление конфигурации раздела в messageTimestampTypeCreateTime используемом (т. е. времени создания события) вместо 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 включают:

Окно и грейс

Операции с окном в DSL Kafka Streams позволяют разработчикам управлять группированием записей для заданного ключа для операций с отслеживанием состояния, таких как агрегаты и соединения.

Операции с окнами также позволяют спецификации льготного периода обеспечить некоторую гибкость для записей вне порядка для заданного окна. Запись, предназначенная для данного окна и прибывает после заданного окна, но в течение льготного периода принимается. Записи, поступающие после льготного периода, удаляются.

Приложения должны использовать элементы управления окнами и льготным периодом, чтобы повысить отказоустойчивость для записей вне порядка. Соответствующие значения зависят от рабочей нагрузки и должны быть определены эмпирически.

Гарантии обработки

Бизнес-и технические пользователи стремятся извлечь ключевые бизнес-аналитические сведения из выходных данных рабочих нагрузок потоковой обработки, которые преобразуются в высокие требования к гарантии транзакций. Потоки Kafka работают вместе с транзакциями Kafka, чтобы обеспечить гарантии обработки транзакций путем интеграции с совместимыми брокерами Kafka (например, Центры событий Azure) базовой системы хранения, чтобы гарантировать, что фиксации смещения и обновления хранилища состояний записываются атомарно.

Чтобы гарантировать гарантии обработки транзакций, processing.guarantee параметр в конфигурации Kafka Streams должен быть обновлен из значения at_least_onceexactly_once_v2 по умолчанию (для клиентских версий в Apache Kafka 2.5) или exactly_once (для клиентских версий до Apache Kafka 2.5.x).

Следующие шаги

В этой статье приведены ознакомительные сведения о Центрах событий для компонента Kafka. См. сведения в руководстве для разработчиков Apache Kafka по Центрам событий Azure.

Пошаговые инструкции по созданию концентратора событий и доступу к нему с помощью SAS или OAuth см. в статье Краткое руководство: потоковая передача данных с концентраторами событий с помощью протокола Kafka.

Кроме того, см . примеры OAuth на сайте GitHub.