Apache KafkaApache Kafka – распределённая система для обработки данных в режиме реального времени.
Работает как почта — одни сервисы передают туда сообщения, а другие — получают.
Называют брокером сообщений, так как выступает в качестве посредника
Компоненты
🟣🟣
Продюсеры — приложения, которые публикуют данные
🟣
Консьюмеры — приложения, которые читают
⚪️
Топики – каналы, куда продюсеры публикуют сообщения. Могут иметь множество подписчиков (консьюмеров)
⚪️
Партиции – части топиков для параллельной обработки данных.
Сообщения в партиции хранятся в строгом порядке
🟣
Брокеры — серверы, которые принимают, хранят и передают сообщения.
В кластере их может быть несколько для отказоустойчивости и масштабируемости
🟣🟣
Зукипер — сервис для координации. Управляет конфигурацией кластера, отслеживает состояние брокеров, топиков и партиций
Принцип работы
*️⃣*️⃣
Публикация: продюсер отправляет данные в топик, выбирает партицию для записи (с помощью ключа сообщения, по алгоритму round-robin)
*️⃣
Хранение: сообщение записывается в выбранную партицию на одном из брокеров.
Происходит репликация (об этом далее)
*️⃣*️⃣
Чтение: консьюмер запрашивает данные из топика, Kafka направляет консьюмера к соответствующей партиции.
Читает, начиная с последнего прочитанного сообщения (
офсета).
*️⃣*️⃣
Обновление офсетов: консьюмер периодически обновляет свой текущий офсет (в Zookeeper / в самом Kafka, зависит от настройки)
Это позволяет возобновить чтение с правильного места в случае сбоя.
Репликация данных
✨✨
Реплика в Kafka – копия партиции топика, хранится на другом брокере для обеспечения надежности и отказоустойчивости.
✨
Лидер — основная копия партиции, которая обрабатывает все операции записи и чтения.
Фолловеры — дополнительные копии, которые синхронизируются с лидером.
Как работает?➖Сообщения записываются в лидера и затем копируются на фолловеров
➖Фолловеры следят за лидером и обновляются в реальном времени
➖Если лидер выходит из строя, один из фолловеров становится новым лидером для непрерывности работы
✨
Replication factor — количество реплик для каждой партиции. Например, фактор репликации 3 означает 1 основную копию и 2 резервные.
Типы доставки сообщений 🟠
At most once: сообщение может быть доставлено максимум один раз, возможны потери
🟠
At least once — как минимум один раз, возможны дублирования
🟠
Exactly once — ровно один раз, без потерь и дублирования
Надежность доставкиПродюсеры могут настроить количество подтверждений (acks) от брокеров
😀acks=0: Без подтверждений, низкая надежность.
😀acks=1: Подтверждение от лидера, средняя надежность.
😀acks=all: Подтверждение от всех реплик, высокая надежность.
Способы Интеграции с Kafka *️⃣*️⃣
Прямое подключение: через стандартные клиенты (Java, Python, Go и др.)
*️⃣*️⃣
Коннекторы Kafka Connect: для интеграции с БД, хранилищами и др.
*️⃣П
отоковые платформы: Apache Flink,
Apache Spark и др
Примеры
Синхронная работа⏺
Синхронная передача: приложения отправляют данные и ожидают подтверждения от Kafka
☺️ параметр acks=all у продюсера, чтобы дождаться подтверждения от всех реплик перед продолжением
⏺
Запрос-ответ: консьюмер отправляет запрос и ожидает ответа в другом топике.
☺️ уникальные ключи для корреляции запросов и ответов
Асинхронная ⏺
Логирование и мониторинг: отправка логов без ожидания подтверждения
☺️ параметр acks=1 или acks=0 для продюсеров, чтобы минимизировать задержку
⏺
Обработка событий☺️ группа консьюмеров параллельно обрабатывает события
⏺
ETL-процессы: загрузка в хранилища через Kafka
☺️ Kafka Connect для интеграции с источниками и приемниками
Kafka как хранилище данных
😀Можно настраивать время хранения сообщений от минут до нескольких лет
😀Сообщения хранятся в сегментах и индексируются ✨ эффективное управление большими объемами данных
😀Высокая скорость записи и чтения данных
Ограничения 😀Нет сложных запросов и транзакционной поддержки
😀Старые данные автоматически удаляются по истечению срока
😀Иногда нужна интеграция с др системами (HDFS, S3, реляционные БД)
📎 Подборка материалов в
этом посте
#интеграции