下面是我的主题xx\u json\u主题的分区信息。这是一个有三个节点的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知道node-1坏了,它需要保持复制因子,它会不会使node-3成为分区1的副本,而node-2不是分区0的副本,然后使node-3和node-2成为其isr的一部分?
或者你认为Kafka没有承诺。。。如果复制因子是2,并不意味着数据在任何时候都至少在2个节点上可用(--cassandra中的一致性级别)。
1条答案
按热度按时间y3bcpkx11#
你是对的,这不是Kafka处理复制因子的方式。当为主题指定复制因子2时,该主题的分区将在2个代理上创建(集群控制器尝试将它们分布在集群上)。在那个时候,一个成为领导者,一个成为追随者。这并不能保证分区总是有两个副本,它只指定创建两个副本,如果所有副本都不存在,代理将通知您(通过underreplicated partitions count mbean)。
kafka不会对集群执行任何自动修复,除非一个分区有多个副本,并且leader副本变得不可用,其中一个follower将接管leader。然而,当那个领导人回来后,他将不会恢复领导地位(他将成为一个追随者)。同样,集群也不会创建新的副本。这可能是一个资源密集型操作,因为需要通过网络将大量数据移动到新的副本。
虽然有执行自动引线重新平衡的选项,但没有执行自动副本创建的等效选项。