Найти в Дзене
IT-Volchkov

Apache Kafka

Apache Kafka – распределённая система для обработки данных в режиме реального времени. Работает как почта — одни сервисы передают туда сообщения, а другие — получают.  Называют брокером сообщений, так как выступает в качестве посредника Компоненты 🟣Продюсеры — приложения, которые публикуют данные 🟣Консьюмеры — приложения, которые читают ⚪️Топики – каналы, куда продюсеры публикуют сообщения. Могут иметь множество подписчиков (консьюмеров) ⚪️Партиции – части топиков для параллельной обработки данных. Сообщения в партиции хранятся в строгом порядке 🟣Брокеры — серверы, которые принимают, хранят и передают сообщения. В кластере их может быть несколько для отказоустойчивости и масштабируемости 🟣Зукипер — сервис для координации. Управляет конфигурацией кластера, отслеживает состояние брокеров, топиков и партиций Принцип работы *️⃣Публикация: продюсер отправляет данные в топик, выбирает партицию для записи (с помощью ключа сообщения, по алгоритму round-robin) *️⃣Хранение: со

Apache 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, реляционные