如果其副本中的一个副本停止以跟上复制因素,那么kafka会创建一个新的关注者

时间:2015-09-15 14:32:55

标签: bigdata apache-kafka kafka-consumer-api

以下是主题 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&&的复制品。 node-2是partition-0的副本,然后使node-3和node-2成为他们的Isr?

的一部分

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

1 个答案:

答案 0 :(得分:3)

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

Kafka不会对群集执行任何自动修复,但如果您有一个分区的多个副本,并且领导者副本变得不可用,则其中一个关注者将接管为领导者。然而,当领导者回来时,它将不会恢复领导(它成为追随者)。同样,群集不会创建新的副本。这可能是一项资源密集型操作,因为需要将大量数据通过网络移动到新副本。

虽然可以选择执行自动领导者重新平衡,但没有相同的选项来执行自动副本创建。