Перейти к основному содержимому

Apache Kafka: экосистема

Apache Kafka - платформа для потоковых данных. Включает:

  • Kafka Connect
  • ksqlDB
  • Kafka Streams

Kafka Streams

Библиотека для обработки потоков событий с возможностью:

  • Агрегации: подсчет количества событий за период для каждого ключа. Например, количества кликов по рекламе для каждого пользователя за последний час.
  • Обогащении: дополнение событий данными из внешних систем или других топиков. Например, добавление информации о профиле пользователя к событиям покупок.
  • Фильтрации: отбор нужных событий.
  • Трансформации: изменение формата/структуры сообщения. Например, конвертация из бинарного формата Avro в JSON.
  • Объединения: соединение данных из нескольких топиков. Например, объединение данных о заказах и платежах

Архитектурная идея — микросервисный подход к потоковой обработке. Kafka Streams инкапсулирует логику обработки в независимое приложение, которое масштабируется вместе с кластером Kafka. Обадает отказоустойчивостью и не требует развертывания отдельной инфраструктуры (вроде кластеров Spark / Flink).

Процесс обработки данных реализуется с помощью компонентов:

  • Source Processor — читает данные из Kafka.
  • Stream Processor — выполняет над ними операции (фильтрация, суммирование и т. д.).
  • Sink Processor — записывает результат обратно в Kafka или в другую систему.

Хранение данных между обработками

Некоторые операции в Kafka Streams требуют запоминания прошлых данных. Для этого Kafka Streams использует два механизма:

  • State Store — локальное хранилище внутри Kafka Streams, где находятся текущие вычисления.
  • Changelog Topic — специальный топик в Kafka, куда записываются изменения в State Store. Если приложение перезапускается, то загружает данные из этого топика и продолжает работу с того же места. По умолчанию Kafka Streams хранит состояние локально, но обработанные данные можно записывать во внешние БД или облачные хранилища.

Примеры ключевых концепций:

Топология: компоненты Kafka Streams (source, processor,sink и хранилищ состояния: state store) образуют граф обработки данных. Он описывает цепочку преобразований от источника данных через различные операции обработки к приемнику результатов. Например: чтение событий из топика → фильтрация некорректных данных → преобразование формата → агрегация по ключам → запись результатов.

Exactly-Once Semantics (EOS): Гарантия однократной обработки каждой входящей записи даже в условиях сбоев сети или перезапусков приложений. Например, важно для финансовых систем, где двойная обработка платежа недопустима.

Горизонтальное масштабирование: Автоматическое распределение нагрузки между экземплярами приложения. Kafka Streams автоматически перераспределяет партиции топиков между работающими инстансами. Это позволяет увеличивать пропускную способность добавлением новых экземпляров приложения.

Примеры использования

1. Агрегация метрик в реальном времени. Обработка потоков телеметрии IoT-устройств с вычислением средних показателей за временные окна. Например, расчет средней температуры с датчиков каждые 5 минут с детализацией по регионам. Результаты агрегации отправляются в топик для визуализации в Grafana.

2. Обогащение транзакций. Обработка финансовых транзакций с добавлением информации о пользователе из внешней базы данных. Например, обогащение данных о платеже информацией о возрастной группе и истории покупок пользователя для системы фрод-мониторинга.

3. Динамический ETL-конвейер. Трансформация данных из формата Avro в JSON с валидацией и фильтрацией некорректных записей. Например, очистка и преобразование данных логов веб-сервера перед загрузкой в аналитическое хранилище.

Эксплуатация: Приложения упаковываются в Docker-образы и развертываются в Kubernetes. Мониторинг осуществляется через JMX-метрики, интегрированные в Prometheus/Grafana.

  • Ключевые метрики: отставание обработки, скорость обработки сообщений и частоту коммита смещений.

Kafka Connect

Фреймворк для масштабируемого ввода и вывода данных между Kafka и внешними системами. Решает задачи интеграции с различными источниками и приемниками данных.

Пример: Синхронизация данных между PostgreSQL и Elasticsearch. Источник (JDBC Connector) читает изменения из базы данных с помощью механизма изменения данных Debezium, а приемник (Elasticsearch Connector) загружает эти данные в поисковый индекс для обеспечения быстрого поиска.

Особенности:

  • Готовые коннекторы для популярных систем (более 100 коннекторов для различных СУБД, облачных хранилищ и SaaS-сервисов)
  • Автоматическое управление смещениями: отслеживание позиции обработки для каждого коннектора
  • Масштабирование через распределенный режим работы в кластере
  • Поддержка преобразований данных: встроенные онлайн преобразования форматов данных

ksqlDB

СУБД для потоковой обработки, позволяющая выполнять SQL-запросы к данным в топиках Kafka. Применяется для быстрого прототипирования и простых ETL-задач без написания кода на Java.

Пример использования: Мониторинг аномальной активности пользователей в реальном времени. Например, обнаружение пользователей, выполняющих более 100 действий в минуту, с отправкой уведомлений в систему безопасности.

Особенности:

  • SQL-синтаксис для потоковой обработки
  • Поддержка оконных агрегаций и joins - возможность объединения потоков данных и агрегации по временным окнам
  • REST API для управления запросами - программное создание и управление потоковыми запросами
  • Интеграция с Schema Registry - автоматическая работа с структурированными форматами данных Avro и Protobuf

Применение: Создание реальных дашбордов, реализация простых правил бизнес-логики, прототипирование сложных пайплайнов и мониторинг качества данных.

Материалы

  1. Kafka Streams (official site)
  2. Экосистема Apache Kafka: Kafka Streams, Kafka Connect
  3. Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции
  4. Потоковая обработка данных с Kafka Streams: что это и как использовать
  5. Как мы используем Kafka Streams в команде хранилища данных Vivid Money?
  6. Микросервисы на основе событий с Kafka Streams и Spring Boot
  7. Kafka Streams vs Consumer API: 4 сходства и 5 отличий
  8. Kafka Streams
  9. Под капотом Kafka Connect: источники, приемники и коннекторы
  10. Kafka Connect на примере Debezium PostgresConnector
  11. Как устроена Kafka Connect: основы интеграции Kafka с системами Big Data
  12. Ивентная модель данных с использованием Kafka и Kafka Connect: Построение гибкой и распределенной архитектуры
  13. Kafka Streams vs ksqlDB: что и когда использовать
  14. ksqlDB
  15. ksqlDb или SQL как инструмент обработки потоков данных
  16. Возможности ksqlDB
  17. Как работают клиенты реестра схем Apache Kafka: подробный разбор
  18. Управление схемами в Kafka с использованием Schema Registry
  19. Как мы Schema Registry для Kafka настраивали, и что могло пойти не так…

Видео

  1. Создание потоковых приложений с использованием Kafka Streams // «Java Developer. Professional»
  2. Использование Kafka Connect. Плюсы и минусы данной технологии.
  3. ksqlDB - анализируем потоки на SQL // Демо-занятие курса «Apache Kafka» | Часть 2
  4. Запись вебинара "Kafka Streams: для чего еще можно использовать Kafka
  5. Kafka Streams (На примере OUTBOX pattern, Kafka Connect, Debezium)
  6. Kafka Connect, Debezium и OUTBOX pattern

Книги

  1. Kafka Streams и ksqlDB: данные в реальном времени - Сеймур Митч
  2. Kafka в действии - Дилан Скотт, Виктор Гамов и Дейв Клейн (Глава 12)