Автоматическая ребалансировка лидеров партиций#

По умолчанию в Corax включена автоматическая ребалансировка лидеров партиций. Параметр auto.leader.rebalance.enable установлен в значение true.

Лидер для каждой партиции выбирается независимо от состояния других партиций. Если партиция синхронизирована на брокере, этот брокер может стать лидером. Такой режим вызывает повышенную нагрузку на диск в следующем сценарии:

  1. Брокер остановлен.

  2. Партиции брокера сменили лидера на оставшиеся в кластере реплики.

  3. В часть партиций записаны новые данные.

  4. Брокер вернулся в кластер.

  5. Началась репликация данных на вернувшийся брокер.

  6. Часть партиций синхронизирована, по другим продолжается репликация.

  7. Для синхронизированных партиций сменился лидер — им стал вернувшийся брокер.

  8. На синхронизированные партиции поступила нагрузка на фоне продолжающейся репликации.

  9. Нагрузка на диск выросла, поскольку одновременно шла репликация и обработка запросов.

Параметр auto.leader.rebalance.on.not.isr.broker.enable#

Для предотвращения описанного сценария используйте параметр auto.leader.rebalance.on.not.isr.broker.enable. По умолчанию параметр включен (true), то есть Corax работает в стандартном режиме.

При отключении параметра (auto.leader.rebalance.on.not.isr.broker.enable=false) брокер с несинхронизированными репликами не участвует в выборах лидера для остальных партиций. Лидером может стать только брокер, все партиции которого синхронизированы.

Способы применения#

Укажите параметр в файле server.properties:

auto.leader.rebalance.on.not.isr.broker.enable=false

Или задайте динамически для всех брокеров кластера:

bin/kafka-configs ... --alter \
  --add-config 'auto.leader.rebalance.on.not.isr.broker.enable=false' \
  --entity-type broker

Внимание

Динамическое изменение параметра возможно только для всего кластера. При попытке изменить значение для конкретного брокера операция завершится ошибкой: Cannot update these configs for specified broker id, please use default cluster level: Set(auto.leader.rebalance.on.not.isr.broker.enable)