Как Kafka обрабатывает сбой лидер-реплики партиции?

Ответ

При сбое лидер-реплики Kafka автоматически инициирует процесс выбора нового лидера для обеспечения высокой доступности и отказоустойчивости. Этот процесс состоит из нескольких шагов:

  1. Обнаружение сбоя. Брокер-контроллер в кластере обнаруживает, что лидер партиции недоступен (например, через потерю сессии в ZooKeeper или внутреннем кворуме Kraft).
  2. Инициация выборов. Контроллер запускает процедуру выбора нового лидера.
  3. Выбор кандидата. Новый лидер выбирается из числа синхронизированных реплик (In-Sync Replicas, ISR). Это реплики, которые гарантированно содержат все подтвержденные сообщения.
  4. Возобновление работы. Клиенты (продюсеры и консюмеры) получают обновленные метаданные и автоматически переключаются на нового лидера. Партиция снова становится доступной для чтения и записи.

На время выборов (обычно миллисекунды) партиция будет недоступна для записи.

Важный аспект — unclean.leader.election.enable

  • По умолчанию (false), эта настройка запрещает выбирать лидером реплику, не входящую в ISR. Это гарантирует отсутствие потери данных, но может привести к полной недоступности партиции, если все реплики из ISR отказали.
  • Если установить в true, Kafka сможет выбрать лидером даже отставшую реплику, что повышает доступность ценой возможной потери данных.

Проверить текущего лидера и ISR можно с помощью CLI-утилиты:

kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic my_topic