Kafka - 为什么新主题分区领导者没有当选?

时间:2018-02-08 07:45:03

标签: apache-kafka

我有一个3个节点的kafka集群。当节点#3死亡时,我的_schemas主题停止正常运行,我看到了:

kafka-topics --zookeeper localhost:2181 --topic _schemas --describe
Topic:_schemas  PartitionCount:1        ReplicationFactor:2     Configs:cleanup.policy=compact
    Topic: _schemas Partition: 0    Leader: -1      Replicas: 3,2   Isr: 2

所以似乎节点#3已经死了,这就是Leader: -1所指的那个。但是为什么Kafka不能像往常一样继续工作,将Node #2指定为新的领导者并将数据复制到#1,以便我们有2个同步副本?

我在kafka日志中看到的错误:

kafka.common.NotAssignedReplicaException:
Leader 3 failed to record follower 2's position -1 since the replica is not 
recognized to be one of the assigned replicas 3 for partition <loop over many partitions>

2 个答案:

答案 0 :(得分:0)

我通过重新启动控制器代理程序解决了此问题。每个kafka集群都有一个经纪人被选为控制人,因此它将协调领导者的选举。我们的情况是控制器卡住了。为了找到哪个代理是控制者,您只需转到zkCli.sh以访问您的kafka集群使用的zookeeper,然后执行get /controller,您将在其中看到brokerId。 我很容易通过重新启动控制器代理来解决此问题,祝您好运。

答案 1 :(得分:-1)

如果您拥有一个包含3个kafka代理的群集,并且您的主题只有1个分区,则表示您只有one个领导者,并且您正在生成数据并仅针对此代理进行操作。

如果你想要kafka:

  

继续像往常一样工作,将节点#2指定为新的领导者

您应该使用3个分区创建主题,每个代理将成为其他分区的领导者,如果其中一个代理失败,您将能够写入其他分区。

查看运行./kafka-topics.sh --zookeeper localhost:2181 --topic _schemas --describe的示例:

Topic:_schemas    PartitionCount:3    ReplicationFactor:1 Configs:retention.ms=14400000
Topic: _schemas   Partition: 0    Leader: 2   Replicas: 2 Isr: 2
Topic: _schemas   Partition: 1    Leader: 0   Replicas: 0 Isr: 0
Topic: _schemas   Partition: 2    Leader: 1   Replicas: 1 Isr: 1

在此示例中,您可以看到_schemas有3个分区,这意味着所有3个代理都是该主题的领导者,每个代理位于不同的分区上,st代理2是分区0上的领导者,代理0和代理1是分区上的追随者0