我有一个 3 成员 kafka-cluster 设置,__consumer_offsets主题有 50 个分区。
下面是 describe 命令的结果:
root@kafka-cluster-0:~# kafka-topics.sh --zookeeper localhost:2181 --describe
Topic:__consumer_offsets PartitionCount:50 ReplicationFactor:1 Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
Topic: __consumer_offsets Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: __consumer_offsets Partition: 1 Leader: -1 Replicas: 2 Isr: 2
Topic: __consumer_offsets Partition: 2 Leader: 0 Replicas: 0 Isr: 0
Topic: __consumer_offsets Partition: 3 Leader: 1 Replicas: 1 Isr: 1
Topic: __consumer_offsets Partition: 4 Leader: -1 Replicas: 2 Isr: 2
Topic: __consumer_offsets Partition: 5 Leader: 0 Replicas: 0 Isr: 0
...
...
成员是节点 0、1 和 2。
很明显,replica=2中的分区没有为它们设置领导者,并且它们的领导者=-1
我想知道是什么导致了这个问题,我重新启动了 2nd member kafka 服务,但我从没想过它会有这个副作用。
现在,所有节点都已经运行了几个小时,这是ls broker/ids的结果:
/home/kafka/bin/zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids"
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[0, 1, 2]
此外,集群中有许多主题,节点 2不是其中任何一个的领导者,并且只要它只有数据(复制因子 = 1,并且分区托管在该节点上),领导者 = -1,很明显从下面。
Here, node 2 is in the ISR, but never a leader, since replication-factor=2.
Topic:upstream-t2 PartitionCount:20 ReplicationFactor:2 Configs:retention.ms=172800000,retention.bytes=536870912
Topic: upstream-t2 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: upstream-t2 Partition: 1 Leader: 0 Replicas: 2,0 Isr: 0
Topic: upstream-t2 Partition: 2 Leader: 0 Replicas: 0,1 Isr: 0
Topic: upstream-t2 Partition: 3 Leader: 0 Replicas: 1,0 Isr: 0
Topic: upstream-t2 Partition: 4 Leader: 1 Replicas: 2,1 Isr: 1,2
Topic: upstream-t2 Partition: 5 Leader: 0 Replicas: 0,2 Isr: 0
Topic: upstream-t2 Partition: 6 Leader: 1 Replicas: 1,2 Isr: 1,2
Here, node 2 is the only partition some chunks of data are hosted on, but leader=-1.
Topic:upstream-t20 PartitionCount:10 ReplicationFactor:1 Configs:retention.ms=172800000,retention.bytes=536870912
Topic: upstream-t20 Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: upstream-t20 Partition: 1 Leader: -1 Replicas: 2 Isr: 2
Topic: upstream-t20 Partition: 2 Leader: 0 Replicas: 0 Isr: 0
Topic: upstream-t20 Partition: 3 Leader: 1 Replicas: 1 Isr: 1
Topic: upstream-t20 Partition: 4 Leader: -1 Replicas: 2 Isr: 2
Any help with how to fix the leader not being elected is greatly appreciated.
此外,很高兴知道这可能对我的经纪人的行为产生任何影响。
编辑 - -
Kafka 版本:1.1.0 (2.12-1.1.0) 可用空间,如 800GB 可用磁盘。日志文件很正常,在节点 2 上,下面是日志文件的最后 10 行。请让我知道是否有什么特别我应该寻找的。
[2018-12-18 10:31:43,828] INFO [Log partition=upstream-t14-1, dir=/var/lib/kafka] Rolled new log segment at offset 79149636 in 2 ms. (kafka.log.Log)
[2018-12-18 10:32:03,622] INFO Updated PartitionLeaderEpoch. New: {epoch:10, offset:6435}, Current: {epoch:8, offset:6386} for Partition: upstream-t41-8. Cache now contains 7 entries. (kafka.server.epoch.LeaderEpochFileCache)
[2018-12-18 10:32:03,693] INFO Updated PartitionLeaderEpoch. New: {epoch:10, offset:6333}, Current: {epoch:8, offset:6324} for Partition: upstream-t41-3. Cache now contains 7 entries. (kafka.server.epoch.LeaderEpochFileCache)
[2018-12-18 10:38:38,554] INFO [GroupMetadataManager brokerId=2] Removed 0 expired offsets in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)
[2018-12-18 10:40:04,831] INFO Updated PartitionLeaderEpoch. New: {epoch:10, offset:6354}, Current: {epoch:8, offset:6340} for Partition: upstream-t41-9. Cache now contains 7 entries. (kafka.server.epoch.LeaderEpochFileCache)
[2018-12-18 10:48:38,554] INFO [GroupMetadataManager brokerId=2] Removed 0 expired offsets in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)
[2018-12-18 10:58:38,554] INFO [GroupMetadataManager brokerId=2] Removed 0 expired offsets in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)
[2018-12-18 11:05:50,770] INFO [ProducerStateManager partition=upstream-t4-17] Writing producer snapshot at offset 3086815 (kafka.log.ProducerStateManager)
[2018-12-18 11:05:50,772] INFO [Log partition=upstream-t4-17, dir=/var/lib/kafka] Rolled new log segment at offset 3086815 in 2 ms. (kafka.log.Log)
[2018-12-18 11:07:16,634] INFO [ProducerStateManager partition=upstream-t4-11] Writing producer snapshot at offset 3086497 (kafka.log.ProducerStateManager)
[2018-12-18 11:07:16,635] INFO [Log partition=upstream-t4-11, dir=/var/lib/kafka] Rolled new log segment at offset 3086497 in 1 ms. (kafka.log.Log)
[2018-12-18 11:08:15,803] INFO [ProducerStateManager partition=upstream-t4-5] Writing producer snapshot at offset 3086616 (kafka.log.ProducerStateManager)
[2018-12-18 11:08:15,804] INFO [Log partition=upstream-t4-5, dir=/var/lib/kafka] Rolled new log segment at offset 3086616 in 1 ms. (kafka.log.Log)
[2018-12-18 11:08:38,554] INFO [GroupMetadataManager brokerId=2] Removed 0 expired offsets in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)
编辑 2 ----
好吧,我已经停止了领导 zookeeper 实例,现在第二个 zookeeper 实例被选为领导者!至此,未选择的领导者问题现已解决!
我不知道可能出了什么问题,所以任何关于“为什么更换 zookeeper 领导者会解决未选择的领导者问题”的想法都非常受欢迎!
谢谢!