Ответ
Архитектура Apache Kafka состоит из следующих основных компонентов:
| Компонент | Назначение | Пример/Ключевая концепция |
|---|---|---|
| Producer | Публикует (производит) сообщения в топики Kafka. | producer.send(new ProducerRecord<>("orders", orderId, orderData)); |
| Consumer | Читает (потребляет) сообщения из топиков. | ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); |
| Broker | Сервер Kafka, который хранит данные, обрабатывает запросы и обеспечивает репликацию. | Кластер состоит из нескольких брокеров для отказоустойчивости. |
| Topic | Логический именованный канал для сообщений (например, user-logs, payment-events). |
Сообщения публикуются в топик и читаются из него. |
| Partition | Часть топика для горизонтального масштабирования и параллельной обработки. | Каждый партишн упорядочен, но порядок между партишнами не гарантирован. |
| ZooKeeper/KRaft | ZooKeeper (до версии 2.8): управлял метаданными кластера. KRaft: новый встроенный механизм консенсуса (Raft), заменяющий ZooKeeper. | Управление контроллерами, метаданными топиков и партишнов. |
| Kafka Connect | Фреймворк для потоковой интеграции с внешними системами (БД, облачные хранилища). | Готовые коннекторы для MySQL, Elasticsearch, S3 и др. |
| Kafka Streams | Библиотека для обработки потоков данных в реальном времени (stream processing). |
KStream<String, String> stream = builder.stream("input-topic");
stream.filter((key, value) -> value.length() > 5)
.to("output-topic");
``` |
**Взаимодействие:** Producers → (Topics/Partitions on Brokers) → Consumers. Connect и Streams API строятся поверх этой базовой модели.