Лидер раздела Kafka не обновляется после удаления брокера

У меня есть кластер Kafka, управляемый marathon / mesos, у которого была версия 3 брокеров 0.10.2.1. Образы докеров основаны на wurstmeister / kafka-docker. broker.id=-1, который назначается автоматически и последовательно при запуске, и лидеры автоматически перебалансируются auto.leader.rebalance.enable=true. Клиенты - это версия 0.8.2.1.

Конфигурация Zookeeper:

➜ zkCli -server zookeeper.example.com:2181 ls /brokers/ids
[1106, 1105, 1104]

➜ zkCli -server zookeeper.example.com:2181 get /brokers/ids/1104
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},
"endpoints":["PLAINTEXT://host1.mesos-slave.example.com:9092"],
"jmx_port":9999,"host":"host1.mesos-slave.example.com",
"timestamp":"1500987386409",
"port":9092,"version":4}

➜ zkCli -server zookeeper.example.com:2181 get /brokers/ids/1105
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},
"endpoints":["PLAINTEXT://host2.mesos-slave.example.com:9092"],
"jmx_port":9999,"host":"host2.mesos-slave.example.com",
"timestamp":"1500987390304",
"port":9092,"version":4}

➜ zkCli -server zookeeper.example.com:2181 get /brokers/ids/1106
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},
"endpoints":["PLAINTEXT://host3.mesos-slave.example.com:9092"],
"jmx_port":9999,"host":"host3.mesos-slave.example.com",
"timestamp":"1500987390447","port":9092,"version":4}

➜ bin/kafka-topics.sh --zookeeper zookeeper.example.com:2181 --create --topic test-topic --partitions 2 --replication-factor 2
Created topic "test-topic".

➜ bin/kafka-topics.sh --zookeeper zookeeper.example.com:2181 --describe --topic test-topic
Topic:test-topic    PartitionCount:2        ReplicationFactor:2     Configs:
        Topic: test-topic  Partition: 0    Leader: 1106    Replicas: 1106,1104     Isr: 1106
        Topic: test-topic  Partition: 1    Leader: 1105    Replicas: 1104,1105     Isr: 1105

Потребители могут потреблять то, что производят производители.

➜ /opt/kafka_2.10-0.8.2.1 bin/kafka-console-producer.sh --broker-list 10.0.1.3:9092,10.0.1.1:9092 --topic test-topic
[2017-07-25 12:57:17,760] WARN Property topic is not valid (kafka.utils.VerifiableProperties)
hello 1
hello 2
hello 3
...

➜ /opt/kafka_2.10-0.8.2.1 bin/kafka-console-consumer.sh --zookeeper zookeeper.example.com:2181 --topic test-topic --from-beginning
hello 1
hello 2
hello 3
...

Затем брокеры 1104 и 1105 (host1 и host2) отключаются, а другой подключается к сети, 1107 (host 1), вручную с использованием интерфейса marathon.

➜ zkCli -server zookeeper.example.com:2181 ls /brokers/ids
[1107, 1106]

➜ zkCli -server zookeeper.example.com:2181 get /brokers/ids/1107
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},
"endpoints":["PLAINTEXT://host1.mesos-slave.example.com:9092"],
"jmx_port":9999,"host":"host1.mesos-slave.example.com",
"timestamp":"1500991298225","port":9092,"version":4}

Потребитель по-прежнему получает сообщения от производителя, но описание тем выглядит устаревшим:

Topic:test-topic    PartitionCount:2        ReplicationFactor:2     Configs:
        Topic: test-topic  Partition: 0    Leader: 1106    Replicas: 1106,1104     Isr: 1106
        Topic: test-topic  Partition: 1    Leader: 1105    Replicas: 1104,1105     Isr: 1105

Я пробовал перебалансировать kafka-preferred-replica-election.sh, kafka-reassign-partitions.sh.

➜ $cat all_partitions.json
{
  "version":1,
  "partitions":[
    {"topic":"test-topic","partition":0,"replicas":[1106,1107]},
    {"topic":"test-topic","partition":1,"replicas":[1107,1106]}
  ]
}

➜ bin/kafka-reassign-partitions.sh --zookeeper zookeeper.example.com:2181 --reassignment-json-file all_partitions.json --execute

➜ bin/kafka-reassign-partitions.sh --zookeeper zookeeper.example.com:2181 --reassignment-json-file all_partitions.json --verify

Status of partition reassignment:
Reassignment of partition [test-topic,0] completed successfully
Reassignment of partition [test-topic,1] is still in progress

➜ $cat all_leaders.json
{
  "partitions":[
    {"topic": "test-topic", "partition": 0},
    {"topic": "test-topic", "partition": 1}
  ]
}

➜ bin/kafka-preferred-replica-election.sh --zookeeper zookeeper.example.com:2181 --path-to-json-file all_leaders.json
Created preferred replica election path with {"version":1,"partitions":[{"topic":"test-topic","partition":0},{"topic":"test-topic","partition":1}]}
Successfully started preferred replica election for partitions Set([test-topic,0], [test-topic,1])

Лидер раздела для раздела 1 по-прежнему 1105, что не имеет никакого смысла:

➜ bin/kafka-topics.sh --zookeeper zookeeper.example.com:2181 --describe --topic test-topic

Topic:test-topic    PartitionCount:2        ReplicationFactor:2     Configs:
        Topic: test-topic   Partition: 0    Leader: 1106    Replicas: 1106,1107     Isr: 1106,1107
        Topic: test-topic   Partition: 1    Leader: 1105    Replicas: 1107,1106,1104,1105   Isr: 1105

Почему раздел 1 считает, что лидером по-прежнему является 1105, хотя хост 2 не жив?


person Kyr    schedule 25.07.2017    source источник


Ответы (1)


У меня аналогичная проблема с Apache kafka 2.11. Иметь кластер из 3 брокеров, с темой разделов = 2 и коэффициентом репликации = 1. Итак, разделы моей темы были распределены между 2 брокерами из 3. В разгар создания сообщений я вручную отключил один из брокеров, где один По прошествии значительного времени лидер указанного раздела продолжал отображаться как -1. т.е. раздел не был перенесен на 3-го активного и работающего брокера. У меня auto.leader.rebalance.enable было установлено значение true для всех брокеров. Кроме того, клиент-производитель продолжал пытаться производить в раздел, который был на закрытом брокере, и продолжал не работать.

person Binita Bharati    schedule 11.12.2017