Что такое In-Sync Replicas (ISR) в Apache Kafka и какова их роль

Ответ

In-Sync Replicas (ISR) в Apache Kafka — это набор реплик партиции, которые полностью синхронизированы с лидером. Их основная роль — обеспечивать отказоустойчивость и гарантировать сохранность данных (durability).

Когда продюсер отправляет сообщение с подтверждением acks=all, лидер коммитит его только после того, как получит подтверждение от всех реплик из списка ISR. Это гарантирует, что сообщение не будет потеряно, даже если лидер выйдет из строя сразу после отправки ответа продюсеру.

Механизм работы:

  1. Лидер (Leader): Единственная реплика, которая обрабатывает все запросы на чтение и запись для своей партиции.
  2. Последователи (Followers): Пассивно копируют данные с лидера.
  3. Попадание в ISR: Последователь считается синхронизированным и добавляется в ISR, если он не слишком сильно отстал от лидера. Величина отставания контролируется параметром replica.lag.time.max.ms.
  4. Смена лидера: В случае отказа текущего лидера, Kafka выбирает нового из числа реплик в ISR, что гарантирует отсутствие потери данных.

Ключевая настройка:

  • min.insync.replicas: Минимальное количество реплик в ISR (включая лидера), которое должно подтвердить запись, чтобы она считалась успешной. Если число реплик в ISR падает ниже этого значения, брокер перестает принимать записи в данный топик, возвращая ошибку NotEnoughReplicas.

Пример проверки ISR через CLI:

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

В выводе команды для каждой партиции будут указаны Leader, Replicas и Isr.