Nag*_*Nag 2 apache-kafka confluent-platform
我开始看到以下错误
[2020-06-12 20:09:01,324] ERROR [ReplicaManager broker=3] Error processing append operation on partition __consumer_offsets-10 (kafka.server.ReplicaManager)
org.apache.kafka.common.errors.NotEnoughReplicasException: The size of the current ISR Set(3) is insufficient to satisfy the min.isr requirement of 2 for partition __consumer_offsets-10
Run Code Online (Sandbox Code Playgroud)
我的设置是拥有三个经纪人,并且所有经纪人都已上线。在出现此错误之前我做了几件事
我在所有代理中将 min.isr 配置为 2。我创建了一个复制因子为 3 的主题,并开始从 ack = 1 且两个代理关闭的生产者生成消息。我召集了所有经纪人并开始消费。
几个事实
有趣的是,WRT 首选的领导者战略并未发生重新平衡
$ kafka-topics --zookeeper 127.0.0.1:2181 --topic stock-prices --describe
Topic: stock-prices PartitionCount: 3 ReplicationFactor: 3 Configs: min.insync.replicas=2
Topic: stock-prices Partition: 0 Leader: 1 Replicas: 1,3,2 Isr: 1,2,3
Topic: stock-prices Partition: 1 Leader: 1 Replicas: 2,1,3 Isr: 1,2,3
Topic: stock-prices Partition: 2 Leader: 1 Replicas: 3,2,1 Isr: 1,2,3
Run Code Online (Sandbox Code Playgroud)
这是你的问题:
您已设置min.insync.replicas=2,这意味着您需要至少两个启动并运行的代理才能将消息发布到主题。如果您辜负了 2 名经纪人,那么您就只剩下一名经纪人了。这意味着您的insync.replica要求没有得到满足。
这与消费者无关,因为这是关于经纪人的。当您设置时acks=1,这意味着当消息发布到一个代理时,您的生产者会得到确认。(它不会确认所有副本均已创建)。
所以问题是,当单个代理(领导者)收到消息时,您的生产者会确认已收到消息。但领导者无法放置副本,因为没有任何代理进行同步。
完成此操作的一种方法是设置acks=all,这样在所有副本完成之前,您的生产者不会得到确认。它将重试,直到至少 2 个同步副本在线。
| 归档时间: |
|
| 查看次数: |
10431 次 |
| 最近记录: |