我的kafka集群有5个broker, 正常运行, 但是消费者提交offset却异常: Messages are written to the log, but to fewer in-sync replicas than required. (kafka服务端版本:0.10.0.0, 客户端整合springboot, spring-kafka版本为2.2.8.RELEASE) 异常信息:
如果没有满足可用的
min.insync.replicas
,并且生产者使用ack=all
,那么消息就不会被提交,消费者也不会收到该消息,即使在崩溃的replicas回来并再次被添加到ISR列表中。你可以通过以下方式来测试。启动2个kafka节点,设置
min.insync.replicas = 2
$ ./bin/kafka-server-start.sh ./config/server-1.properties $ ./bin/kafka-server-start.sh ./config/server-2.properties
创建一个有1个分区和
RF=2
的topic。确保两个broker节点都在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
运行消费者和生产者。确保生产者使用`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
生成一些信息。消费者应该收到它们。
杀死其中一个broker节点(我杀了
id=2
的broker)。检查ISR列表是否减少到一个broker节点。$ ./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
尝试再次生产,在生产者中,你应该报如下错误
Error: NOT_ENOUGH_REPLICAS
(每次重试一个),最后是
Messages are rejected since there are fewer in-sync replicas than required.
消费者将不会收到这些信息。
重新启动被杀死的broker,并尝试再次生产。消费者也会收到这些信息,但不会收到你在其中一个副本关闭时发送的信息。
可能是我没表述清楚: 集群5个broker, min.insync.replicas=2, 集群所有broker都是正常的, 并且, 生产者正常生产消息, 但是消费者却抛出如题所示异常
原因就是上面的,你describe一下就知道了。
你的topic活跃副本数对吗,不能你说正常就正常,贴数据我才知道正不正常。
配置跟数据都没有任何问题, 所以会抛出上面的异常信息才觉得奇怪...
isr配置
partition信息
你的答案