Ответ
При сбое лидер-реплики Kafka автоматически инициирует процесс выбора нового лидера для обеспечения высокой доступности и отказоустойчивости. Этот процесс состоит из нескольких шагов:
- Обнаружение сбоя. Брокер-контроллер в кластере обнаруживает, что лидер партиции недоступен (например, через потерю сессии в ZooKeeper или внутреннем кворуме Kraft).
- Инициация выборов. Контроллер запускает процедуру выбора нового лидера.
- Выбор кандидата. Новый лидер выбирается из числа синхронизированных реплик (
In-Sync Replicas
, ISR). Это реплики, которые гарантированно содержат все подтвержденные сообщения. - Возобновление работы. Клиенты (продюсеры и консюмеры) получают обновленные метаданные и автоматически переключаются на нового лидера. Партиция снова становится доступной для чтения и записи.
На время выборов (обычно миллисекунды) партиция будет недоступна для записи.
Важный аспект — unclean.leader.election.enable
- По умолчанию (
false
), эта настройка запрещает выбирать лидером реплику, не входящую в ISR. Это гарантирует отсутствие потери данных, но может привести к полной недоступности партиции, если все реплики из ISR отказали. - Если установить в
true
, Kafka сможет выбрать лидером даже отставшую реплику, что повышает доступность ценой возможной потери данных.
Проверить текущего лидера и ISR можно с помощью CLI-утилиты:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic my_topic