Ответ
Архитектура Apache Kafka строится из нескольких взаимосвязанных компонентов:
-
Брокер (Broker)
- Что это: Отдельный сервер (нода) в кластере Kafka. Хранит данные, обрабатывает запросы на запись и чтение.
- Зачем: Кластер состоит из нескольких брокеров для обеспечения масштабируемости, отказоустойчивости и распределения нагрузки. Каждый брокер идентифицируется уникальным ID.
-
Топик (Topic)
- Что это: Логическая категория или канал, в который публикуются сообщения. Аналог таблицы в БД или темы в очереди.
- Зачем: Позволяет разделять данные по типам событий (например,
user-registrations,payment-events).
-
Партиция (Partition)
- Что это: Топик физически делится на одну или несколько упорядоченных, неизменяемых последовательностей записей — партиций.
- Зачем: Обеспечивает параллелизм и масштабирование. Разные партиции топика могут обслуживаться разными брокерами. Порядок гарантируется только в пределах одной партиции.
- Репликация: Каждая партиция реплицируется на несколько брокеров (один лидер для записи/чтения, остальные — follower-ы для отказоустойчивости).
-
Продюсер (Producer)
- Что это: Клиентское приложение, публикующее (пишущее) сообщения в топики Kafka.
- Зачем: Определяет, в какую партицию топика отправить сообщение (по ключу или round-robin).
-
Пример (Java):
Properties props = new Properties(); props.put("bootstrap.servers", "broker1:9092,broker2:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); try (Producer<String, String> producer = new KafkaProducer<>(props)) { ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "user123", "{"event":"login"}"); producer.send(record); // Асинхронная отправка }
-
Консьюмер (Consumer)
- Что это: Клиентское приложение, читающее сообщения из топиков.
- Зачем: Консьюмеры объединяются в группы (Consumer Groups). Каждая партиция топика потребляется только одним консьюмером из группы, что позволяет масштабировать обработку.
-
ZooKeeper / KRaft (Контроллер)
- Что это: Служба управления метаданными кластера (до версии Kafka 3.0+ — Apache ZooKeeper, в новых версиях — встроенный Raft-консенсус KRaft).
- Зачем: Отвечает за выбор лидера партиций, отслеживание состояния брокеров, конфигурацию ACL. Важно: В актуальных версиях Kafka стремится к полному отказу от ZooKeeper в пользу KRaft.
Взаимосвязь: Продюсеры пишут данные в партиции топиков на брокерах. Консьюмеры читают эти данные, отслеживая свою позицию (offset). Координацией всего процесса управляет контроллер (ZooKeeper/KRaft).