Выборы нечестного лидера в Кафке - один и тот же лидер для всех разделов - PullRequest
1 голос
/ 09 июня 2019

У меня есть кластер Kafka с 5 разделами. При уменьшении до 3 выборы лидера проводились несколько раз.

Наконец, только один брокер стал лидером по всем 3 разделам одной из моих тем.

Topic: test          PartitionCount:3       ReplicationFactor:3
Topic: test Partition: 0    Leader: 2       Replicas: 2,0,1    Isr: 2,1,0
Topic: test Partition: 1    Leader: 2       Replicas: 3,1,2    Isr: 2,1
Topic: test Partition: 2    Leader: 2       Replicas: 4,2,3    Isr: 2

2,1,0 являются брокерами, которые работают.

раздел 0 доступен с 2, 0, 1. Доступны все брокеры. Итак, isr = 2,1,0

раздел 1 доступен с 3, 1, 2, но 3 удален, брокер. Так ISR = 2,1

раздел 2 доступен с 4,2,3, но оба 4,3 являются удаленными брокерами. Так ISR = 2

Обратите внимание, что только 2 были избраны в качестве лидера. Даже если мы предположим, что он имеет самый высокий водяной знак среди других посредников, все ISR для данного раздела могли быть синхронизированы, поэтому все имеют одинаковые смещения для данного раздела (в противном случае они были бы удалены из ISR).

Я ждал много времени (есть время, после которого, если одна из реплик окажется не на должном уровне, она будет удалена из ISR), но все же это выборы лидера.

Лидеры могут быть распределены равномерно (с балансировкой нагрузки).

For example, partition-0 leader can be 0
             partition 1 leader can be 1
             partition 2 leader can be 2

Почему это не так?

Примечание: я не включил unclean leader election. Это только значение по умолчанию.

Если мы предположим, что 0,1 произошло после выборов лидера, почему разве нет переизбрания тогда? Если ISR обновлены, в идеале лидеры тоже должны быть. Не так ли?

т.е. если Кафка знает, что 0,1 и иметь синхронизированные реплики, он должен провести еще одного лидера выборы.

Есть ли какая-то конкретная причина, почему это не так?

1 Ответ

2 голосов
/ 09 июня 2019

Кафка имеет концепцию предпочтительного лидера, что означает, что, если возможно, он выберет эту реплику в качестве лидера.Реплика first , указанная в списке реплик, является предпочтительным лидером.Теперь посмотрим на текущее состояние кластера:

Topic: test Partition: 0    Leader: 2       Replicas: 2,0,1    Isr: 2,1,0
Topic: test Partition: 1    Leader: 2       Replicas: 3,1,2    Isr: 2,1
Topic: test Partition: 2    Leader: 2       Replicas: 4,2,3    Isr: 2
  • Раздел 0, брокер 2 является предпочтительным лидером и текущим лидером
  • Раздел 1, брокер 3 является предпочтительным лидером, ноон не синхронизирован, поэтому случайный лидер выбирается между 2 и 1
  • Раздел 2, брокер 4 является предпочтительным лидером, но опять же 4 не синхронизирован.Синхронизируется только 2, поэтому он выбирается.

Если бы все ваши брокеры должны были вернуться обратно в синхронизацию, по умолчанию Кафка переизбрал бы предпочтительных лидеров (или это можно было бы принудительно использовать с помощьюkafka-preferred-replica-election.sh инструмент, см. Балансировка лидерства ).

Если отсутствующие посредники не будут перезапущены, вы можете изменить назначения реплики для разделов, чтобы сбалансировать лидерствовручную с помощью инструмента kafka-reassign-partitions.sh.Просто убедитесь, что вы выбрали предпочтительного лидера в качестве первой записи в списке реплик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...