【问题标题】:Kafka - why new topic partition leader is not elected?Kafka - 为什么没有选出新的主题分区领导者?
【发布时间】:2019-06-12 04:50:31
【问题描述】:

我有一个 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>

【问题讨论】:

  • 我使用的Kafka版本是0.11,类似的错误,但我怎么知道?
  • 重启其他节点(1和2)实际上有助于解决问题
  • 检查 controller.log 看看出了什么问题以及为什么控制器没有为 [_schemas,0] 选择新的领导者。

标签: apache-kafka


【解决方案1】:

我通过重启控制器代理解决了这个问题。每个 kafka 集群都有一个 broker 被选为控制器,因此它将协调领导者的选举。我们的情况是控制器卡住了。为了找到哪个broker是控制器,你可以去你的zkCli.sh访问你的kafka集群使用的zookeeper,然后做get /controller,你会在那里看到brokerId。 我通过重新启动控制器代理轻松解决了这个问题,祝你好运。

【讨论】:

    【解决方案2】:

    如果您有一个由 3 个 kafka 代理组成的集群,并且您的主题只有 1 个分区,这意味着您只有 one 领导者,并且您正在生成数据并且仅针对该代理工作。

    如果你想让卡夫卡:

    继续照常工作,将节点 #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 个代理都是该主题的领导者,每个都位于不同的分区上,s.t 代理 2 是分区 0 上的领导者,代理 0 和代理 1 是分区 0 上的跟随者。

    【讨论】:

    • 是的,但在您的情况下,如果 node#0 死了,三分之一的数据会丢失,所以这是不可接受的。在我的情况下,我的复制因子 = 2,所以如果领导者宕机,所有数据在另一个节点上仍然可用,我希望被选为新的领导者,然后这些数据同步到剩余的节点。
    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2016-07-01
    • 2020-07-05
    • 2020-03-30
    • 2018-05-25
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多