假设分区有 4 个副本(1 个领导者,3 个追随者),并且所有副本当前都处于同步状态。min.insync.replicas
设置为 3 并request.required.acks
设置为 all 或 -1。
生产者向领导者发送消息,领导者将其附加到其日志中。之后,其中两个副本在获取此消息之前就崩溃了。剩下的一个副本成功获取了消息并附加到它自己的日志中。
由于不满足 min.insync.replicas 条件,领导者在一定超时后将向生产者发送错误(我认为是 NotEnoughReplicas)。
我的问题是:附加到领导者和副本日志之一的消息会发生什么?
当崩溃的副本重新上线并且代理开始接受和提交新消息(即在日志中转发高水印)时,它会传递给消费者吗?
如果没有可用的 min.insync.replicas 并且生产者使用 ack=all,则消息不会提交并且消费者不会收到该消息,即使在崩溃的副本回来并再次添加到 ISR 列表之后也是如此。您可以通过以下方式进行测试。
使用 min.insync.replicas = 2 启动两个代理
$ ./bin/kafka-server-start.sh ./config/server-1.properties
$ ./bin/kafka-server-start.sh ./config/server-2.properties
Run Code Online (Sandbox Code Playgroud)
创建一个有 1 个分区且 RF=2 的主题。确保两个代理都在 ISR 列表中。
$ ./bin/kafka-topics.sh --zookeeper zookeeper-1 --create --topic topic1 --partitions 1 --replication-factor 2
Created topic "topic1".
$ ./bin/kafka-topics.sh --zookeeper zookeeper-1 --describe --topic topic1
Topic:topic1 PartitionCount:1 ReplicationFactor:2 Configs:
Topic: topic1 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Run Code Online (Sandbox Code Playgroud)
运行控制台使用者和控制台生产者。确保生产使用 ack=-1
$ ./bin/kafka-console-consumer.sh --new-consumer --bootstrap-server kafka-1:9092,kafka-2:9092 --topic topic1
$ ./bin/kafka-console-producer.sh --broker-list kafka-1:9092,kafka-2:9092 --topic topic1 --request-required-acks -1
Run Code Online (Sandbox Code Playgroud)
产生一些消息。消费者应该收到它们。
杀死其中一个经纪人(我杀死了 id=2 的经纪人)。检查 ISR 列表是否减少到一个代理。
$ ./bin/kafka-topics.sh --zookeeper zookeeper-1 --describe --topic topic1
Topic:topic1 PartitionCount:1 ReplicationFactor:2 Configs:
Topic: topic1 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1
Run Code Online (Sandbox Code Playgroud)
尝试再次生产。在生产者你应该得到一些
Error: NOT_ENOUGH_REPLICAS
Run Code Online (Sandbox Code Playgroud)
(每次重试一次)最后
Messages are rejected since there are fewer in-sync replicas than required.
Run Code Online (Sandbox Code Playgroud)
消费者不会收到这些消息。
重新启动被杀死的代理并尝试再次生产。消费者将收到这些消息,但不会收到您在其中一个副本停机时发送的消息。
根据我的理解,在两个失败的跟随经纪人恢复并赶上之前,水印不会前进。
有关更多详细信息,请参阅此博客文章:http://www.confluence.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/
归档时间: |
|
查看次数: |
11452 次 |
最近记录: |