Кафка, тема разделов с лидером -1
Я заметил, что некоторые из моих тем о кафке ведут себя так, как я не могу четко объяснить.
Например:
./kafka-topics.sh --describe --zookeeper ${ip}:2181 --topic test
Topic:test PartitionCount:3 ReplicationFactor:1 Configs:retention.ms=1209600000
Topic: test Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: test Partition: 1 Leader: -1 Replicas: 2 Isr: 2
Topic: test Partition: 2 Leader: 3 Replicas: 3 Isr: 3
Я особенно обеспокоен Разделом: 1, который показывает Лидер '-1'.
Я также заметил, что примерно 1/3 сообщений, созданных на эту тему, не работает из-за "тайм-аута". Я считаю, что это является следствием того, что у одного раздела нет лидера.
Мне было интересно, есть ли у кого-нибудь понимание того, почему возникает эта проблема и как ее устранить в производственном сценарии без потери данных?
РЕДАКТИРОВАТЬ: я использую основанный на librdkafka Python продюсер; и сообщение об ошибке я вижу Message failed delivery: KafkaError{code=_MSG_TIMED_OUT,val=-192,str="Local: Message timed out"}
3 ответа
Скорее всего, ваш второй брокер Kafka не работает. Для проверки активных брокеров Kafka необходимо запустить
./zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids"
И вывод должен быть похож на приведенный ниже:
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /brokers/ids
[0, 1, 2]
[zk: localhost:2181(CONNECTED) 1]
Если второго брокера нет в списке активных брокеров, вам нужно выяснить, почему он не работает (журналы должны сообщать вам, если что-то пошло не так). Я бы также предложил увеличить коэффициент репликации, поскольку у вас конфигурация с несколькими брокерами.
Это часто означает, что посредник, ведущий этот раздел, находится в автономном режиме. Я бы проверил метрику автономных разделов, чтобы подтвердить это, но также и проверить, работает ли брокер 2 в данный момент.
В последней версии kafka вместо -1 используется None. Чтобы увидеть автономные разделы, выполните следующую команду:
./kafka-topics.sh --zookeeper <zookeeper_ip>:2181 --describe | grep "Leader: None"