Kafka-为什么不选择新主题分区负责人?

edd*_*P23 6 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
Run Code Online (Sandbox Code Playgroud)

因此,似乎节点#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>
Run Code Online (Sandbox Code Playgroud)

Gal*_*odi -1

如果您有一个由 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
Run Code Online (Sandbox Code Playgroud)

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