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


Потоки 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 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 включают:

Окно и благодать

Операции с окном в 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.