Ответ
Apache ZooKeeper — это распределенный сервис координации, критически важный для работы кластера Apache Kafka (до версии 2.8). Он выступает как централизованное хранилище метаданных и обеспечивает консенсус в распределенной системе.
Основные функции ZooKeeper в Kafka:
- Хранение конфигурации кластера: Метаданные о топиках, партициях, их репликах и ACL (Access Control Lists).
- Выбор лидера (Leader Election): Координация процесса выбора лидера для каждой партиции и для контроллера кластера Kafka.
- Обнаружение сервисов (Service Discovery): Отслеживание, какие брокеры живы и являются частью кластера.
- Хранение оффсетов потребителей: Для consumer-групп (в версиях до Kafka 0.9, когда оффсеты хранились в ZooKeeper).
Пример конфигурации подключения Kafka к ZooKeeper (server.properties):
zookeeper.connect=zk-node-1:2181,zk-node-2:2181,zk-node-3:2181/kafka
zookeeper.connection.timeout.ms=6000
Эволюция: Начиная с Kafka 2.8, появился режим KRaft (Kafka Raft), который позволяет Kafka работать без зависимости от ZooKeeper, используя встроенный Raft-консенсус для управления метаданными. В production-средах с версиями 3.0+ KRaft становится стандартной рекомендацией для новых кластеров, упрощая архитектуру и повышая отказоустойчивость.