Распределенная, отказоустойчивая publish-subscribe система обмена сообщениями, разработанная LinkedIN и ставшая проектом Apache. Используется для построения realtime data pipelines и стриминговых приложений.
Основные компоненты и концепции:
- Broker: Сервер Kafka. Кластер Kafka состоит из одного или нескольких брокеров.
- Topic: Категория, в которую публикуются сообщения. Логически разделяет потоки данных.
- Partition: Топик делится на партиции. Каждая партиция — упорядоченная, неизменяемая последовательность сообщений. Сообщения в пределах партиции назначаются уникальный смещение (offset).
- Producer: Приложение, публикующее сообщения в топик.
- Consumer: Приложение, которое подписывается на топик и потребляет сообщения.
- Consumer Group: Группа консьюмеров, которые совместно потребляют сообщения из одного или нескольких топиков. Сообщения из партиции доставляются только одному консьюмеру в группе.
- Zookeeper: Используется для координации кластера Kafka (управление брокерами, топиками, партициями, смещениями консьюмерских групп). В более поздних версиях Kafka роль Zookeeper частично переходит к встроенной службе консенсуса KRaft.
Kafka обеспечивает высокую пропускную способность, масштабируемость и отказоустойчивость за счет репликации партиций между брокерами. Сообщения сохраняются на диске и доступны для прочтения консьюмерами в течение заданного периода времени.
Примеры использования:
- Сбор и обработка логов в реальном времени.
- Стримовая обработка данных (через Kafka Streams, KSQL).
- Разъединение сервисов (микросервисная архитектура).
- Синхронизация данных между системами.