如果其中一个副本已关闭以跟上复制因子,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 不会对集群执行任何自动修复,除非您有多个副本用于一个分区,并且领导者副本变得不可用,其中一个跟随者将接任领导者。然而,当那个领导者回来时,它不会恢复领导地位(它变成了一个追随者)。同样,集群不会创建新的副本。这可能是一个非常耗费资源的操作,因为需要通过网络将大量数据移动到新副本。
虽然有执行自动领导者重新平衡的选项,但没有执行自动副本创建的等效选项。
以下是我对主题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 不会对集群执行任何自动修复,除非您有多个副本用于一个分区,并且领导者副本变得不可用,其中一个跟随者将接任领导者。然而,当那个领导者回来时,它不会恢复领导地位(它变成了一个追随者)。同样,集群不会创建新的副本。这可能是一个非常耗费资源的操作,因为需要通过网络将大量数据移动到新副本。
虽然有执行自动领导者重新平衡的选项,但没有执行自动副本创建的等效选项。