Вопрос проверяет понимание роли ZooKeeper в архитектуре Kafka и его необходимость для управления кластером.
ZooKeeper является центральным компонентом для управления кластером Apache Kafka. Он отвечает за хранение и синхронизацию метаданных, необходимых для работы брокеров, топиков и потребителей. Без ZooKeeper брокеры не могут обнаруживать друг друга, а контроллер не может быть выбран.
При запуске брокера он регистрируется в ZooKeeper, создавая эфемерный узел. Если брокер падает, узел удаляется, и ZooKeeper уведомляет контроллер, который инициирует выбор нового лидера для затронутых разделов.
// Пример команды для просмотра брокеров в ZooKeeper
zkCli.sh -server localhost:2181 ls /brokers/ids
// Вывод: [0, 1, 2] — список активных брокеровНачиная с Kafka 2.8, появился режим KRaft (Kafka Raft), который устраняет зависимость от ZooKeeper, используя собственный протокол консенсуса Raft. Это упрощает архитектуру и уменьшает задержки, но ZooKeeper остаётся стандартом для многих продакшн-систем.
Вывод: ZooKeeper критически важен для управления кластером Kafka, обеспечивая согласованность метаданных и отказоустойчивость. Однако с внедрением KRaft его роль постепенно уменьшается, и в будущем ZooKeeper может быть полностью заменён.