Какой компонент отвечает за координацию и регистрацию брокеров в Apache Kafka?

«Какой компонент отвечает за координацию и регистрацию брокеров в Apache Kafka?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

За координацию кластера 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.