Ответ
За координацию кластера Kafka (регистрацию брокеров, выбор лидера партиции, хранение метаданных) исторически отвечал Apache ZooKeeper. Начиная с версии 2.8 (и стабильно с 3.0+), Kafka может работать без него, используя встроенный протокол KRaft (Kafka Raft).
| Сравнение: | Компонент | Роль | Использование |
|---|---|---|---|
| ZooKeeper | Внешний сервис консенсуса. Хранит метаданные: список брокеров, топики, ACL, конфигурации. | Версии Kafka < 2.8 (режим по умолчанию). | |
| KRaft | Встроенный в Kafka механизм на основе алгоритма Raft. Контроллеры Kafka образуют кворум для управления метаданными. | Версии Kafka >= 2.8 (режим по умолчанию с 3.0). Убирает внешнюю зависимость, упрощает развертывание и повышает отказоустойчивость. |
Пример конфигурации брокера для KRaft:
# Указываем роли процесса (брокер и контроллер могут быть совмещены)
process.roles=broker,controller
# Идентификатор этого узла
node.id=1
# Список всех контроллеров в кворуме
controller.quorum.voters=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
# Реклассируемый адрес для клиентов
advertised.listeners=PLAINTEXT://kafka1:9092
Переход на KRaft — ключевое направление развития Kafka, так как устраняет single point of failure и операционные сложности, связанные с ZooKeeper.