我想我对kafka集群的工作方式感到困惑和不清楚。
当前结构:
我通过从这里下载,用3台机器制作了kafka broker集群
其中一个主题是这样的
ubuntu@kafka1:~/.kafka$ bin/kafka-topics.sh --describe --zookeeper localhost:11111 --topic multi_partitions
Topic:multi_partitions PartitionCount:10 ReplicationFactor:3 Configs:retention.ms=-1,retention.bytes=-1
Topic: multi_partitions Partition: 0 Leader: 1 Replicas: 2,0,1 Isr: 1,0
Topic: multi_partitions Partition: 1 Leader: 0 Replicas: 0,1,2 Isr: 1,0
Topic: multi_partitions Partition: 2 Leader: 1 Replicas: 1,2,0 Isr: 1,0
Topic: multi_partitions Partition: 3 Leader: 1 Replicas: 2,1,0 Isr: 1,0
Topic: multi_partitions Partition: 4 Leader: 0 Replicas: 0,2,1 Isr: 1,0
Topic: multi_partitions Partition: 5 Leader: 1 Replicas: 1,0,2 Isr: 1,0
Topic: multi_partitions Partition: 6 Leader: 1 Replicas: 2,0,1 Isr: 1,0
Topic: multi_partitions Partition: 7 Leader: 0 Replicas: 0,1,2 Isr: 1,0
Topic: multi_partitions Partition: 8 Leader: 1 Replicas: 1,2,0 Isr: 1,0
Topic: multi_partitions Partition: 9 Leader: 1 Replicas: 2,1,0 Isr: 1,0
正如您所看到的,存在三个复制副本,但replica2已经崩溃,所以它不再工作。
问题
如果我可以恢复replica2,它会在创建的数据崩溃时同步吗?
如果我不能恢复replica2,我如何向这个主题添加一个新的代理,并使其复制副本集群中的所有数据?
如果我可以恢复replica2,它是否在创建的数据崩溃时同步?
正如您在评论中提到的,在您的集群中,replication factor = 2
和acks = 1
。假设崩溃的节点是node2。
有两种情况:
场景-1:没有主题分区将您的node2选为领导者。你已经做好了准备,你不会有数据丢失。一旦该节点返回,主题分区领导将丢失的数据推送到node2。
场景-2:假设有一个主题分区选择崩溃的节点作为其领导者。如果是这种情况,集群将选择另一个节点中的一个作为主题分区的领导者。当node2回来,并且其他每个节点都工作正常时,新的领导者将数据推送到node2,以维护配置replication factor = 3
。
如果我不能恢复replica2,如何在本主题中添加新的broker并使其复制副本群集中的所有数据?
一旦崩溃的节点加入集群,集群就能够恢复副本。