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
Применение: Создание реальных дашбордов, реализация простых правил бизнес-логики, прототипирование сложных пайплайнов и мониторинг качества данных.
Материалы
- Kafka Streams (official site)
- Экосистема Apache Kafka: Kafka Streams, Kafka Connect
- Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции
- Потоковая обработка данных с Kafka Streams: что это и как использовать
- Как мы используем Kafka Streams в команде хранилища данных Vivid Money?
- Микросервисы на основе событий с Kafka Streams и Spring Boot
- Kafka Streams vs Consumer API: 4 сходства и 5 отличий
- Kafka Streams
- Под капотом Kafka Connect: источники, при емники и коннекторы
- Kafka Connect на примере Debezium PostgresConnector
- Как устроена Kafka Connect: основы интеграции Kafka с системами Big Data
- Ивентная модель данных с использованием Kafka и Kafka Connect: Построение гибкой и распределенной архитектуры
- Kafka Streams vs ksqlDB: что и когда использовать
- ksqlDB
- ksqlDb или SQL как инструмент обработки потоков данных
- Возможности ksqlDB
- Как работают клиенты реестра схем Apache Kafka: подробный разбор
- Управление схемами в Kafka с использованием Schema Registry
- Как мы Schema Registry для Kafka настраивали, и что могло пойти не так…
Видео
- Создание потоковых приложений с использованием Kafka Streams // «Java Developer. Professional»
- Использование Kafka Connect. Плюсы и минусы данной технологии.
- ksqlDB - анализируем потоки на SQL // Демо-занятие курса «Apache Kafka» | Часть 2
- Запись вебинара "Kafka Streams: для чего еще можно использовать Kafka
- Kafka Streams (На примере OUTBOX pattern, Kafka Connect, Debezium)
- Kafka Connect, Debezium и OUTBOX pattern