如果其中一个副本已关闭以跟上复制因子,kafka 会创建一个新的跟随者吗

Would kafka create a new follower if one of its replica is down to keep up with replication factor

以下是我对主题xx_json_topic的分区信息。这是一个具有三个节点的Kafka集群。

所有节点都启动了:

Topic: xx_json_topic    PartitionCount:4    ReplicationFactor:2    Configs:
Topic: xx_json_topic    Partition: 0    Leader: 1   Replicas: 3,1   Isr: 3,1
Topic: xx_json_topic    Partition: 1    Leader: 2   Replicas: 1,2   Isr: 2,1
Topic: xx_json_topic    Partition: 2    Leader: 2   Replicas: 2,3   Isr: 2,3
Topic: xx_json_topic    Partition: 3    Leader: 3   Replicas: 3,2   Isr: 2,3

此时..如果我关闭节点 "node-1" ..它如下所示:

Topic: xx_json_topic    PartitionCount:4    ReplicationFactor:2    Configs:
Topic: xx_json_topic    Partition: 0    Leader: 3   Replicas: 3,1   Isr: 3
Topic: xx_json_topic    Partition: 1    Leader: 2   Replicas: 1,2   Isr: 2
Topic: xx_json_topic    Partition: 2    Leader: 2   Replicas: 2,3   Isr: 2,3
Topic: xx_json_topic    Partition: 3    Leader: 3   Replicas: 3,2   Isr: 2,3

我的问题是..如果 kafka 知道节点 1 已关闭并且它需要维护复制因子,它不会使节点 3 成为分区 1 的副本 && 节点 2 成为分区的副本-0 然后让 node-3 和 node-2 成为它们的 Isr 的一部分?

或者你认为 Kafka 没有承诺...... 如果复制因子是 2 ..这并不意味着数据将始终在至少 2 个节点中可用(---就像 Cassandra 中的一致性级别)。

你是对的,这不是 Kafka 中处理复制因子的方式。当您为主题指定复制因子 2 时,该主题的分区将在 2 个代理上创建(并且集群控制器会尝试将它们分散到集群中)。那个时候,一个成为领导者,一个成为追随者。这并不能保证总是有两个分区副本,它只指定创建两个副本,如果所有副本都不存在,代理将通知您(通过 underreplicated partitions count mbean)。

Kafka 不会对集群执行任何自动修复,除非您有多个副本用于一个分区,并且领导者副本变得不可用,其中一个跟随者将接任领导者。然而,当那个领导者回来时,它不会恢复领导地位(它变成了一个追随者)。同样,集群不会创建新的副本。这可能是一个非常耗费资源的操作,因为需要通过网络将大量数据移动到新副本。

虽然有执行自动领导者重新平衡的选项,但没有执行自动副本创建的等效选项。