kafka队列不消费的一种情况(找错group的情况)
一、问题概述最近碰到了一个问题,使用命令查看kafka的某个topic的消费情况,发现这个topic没有消费者,剩余消息(LAG)一直是满的;但是查看java后台日志,发现确实消费了这个topic,功能正常;所以问题就是查看kafka的topic的消费情况时,LAG为什么不减少、并且显示没有消费者呢?二、问题详情1.kafka有一个命令,可以查看某个组中的topic的消费情况,样例如下:./kaf
一、问题概述
最近碰到了一个问题,使用命令查看kafka的某个topic的消费情况,发现这个topic没有消费者,剩余消息(LAG)一直是满的;
但是查看java后台日志,发现确实消费了这个topic,功能正常;
所以问题就是查看kafka的topic的消费情况时,LAG为什么不减少、并且显示没有消费者呢?
二、问题详情
1.kafka有一个命令,可以查看某个组中的topic的消费情况,样例如下:
./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group commonGroupTest-push --describe
其中commonGroupTest-push是组名;
执行后的结果样例如下:
如图,组为commonGroupTest-push;
topic为basicLawExam;
显示剩余消息数(LAG)为69182;
没有消费者;
2.但是,查看java后台的代码,确实在监听basicLawExam;
查看日志,确实消费了这个topic里的消息,功能正常;
3.按道理这个LAG(剩余消息数)应该是0才对,并且应该有消费者;
但是不知道为什么,LAG只增不减,并且显示没有消费者。
三、原因与解决方法
1.虽然java后台功能正常,确实收到了该topic的消息;但是这个LAG显示的实在是看不懂,因此请教了其它同事。
2.结果发现,找错group了。
3.java后台代码有两个地方,如下:
其中,第一个图片,是xxx.java,配置了kafka消费者,消费topic为basicLawExam,id是basicLawExamId;
第二个图片,是application.yml,配置了group-id: commonGroupTest-push
4.当时我只看到yml中配置了group-id,于是执行了下方的查询kafka的topic消费情况的语句:
./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group commonGroupTest-push --describe
执行这句的话,结果就是显示LAG数只增不减,并且没有消费者。
5.实际上,第一个图片中配置了id=“basicLawExamId”,这个id与group-id的含义相同;
yml中配置的group-id,应该是一个全局的group-id;
如果第一个图片中没有配置id的话,就会使用yml中配置的group-id;
但是第一个图片配置了id,所以,如果想看topic消费情况,需要执行下面这句命令:
./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group basicLawExamId --describe
结果如下:
可以看到,group为basicLawExamId的topic反映的才是java后台消费的那个,这个LAG为0,才是正确结果。
6.至于为什么group为commonGroupTest-push中也会有basicLawExam这个topic,应该是yml中配置了全局group导致的。(如果不在yml中配置group、只在@KafkaListener中配置id的话,应该就更好区分了,这样的话就没有commonGroupTest-push这个多余的group、只有basicLawExamId这个group了)
四、总结
1.kafka中,生产者只有topic,只要配置向哪个topic扔消息即可。
2.kafka中,消费者除了指定topic,还要指定group;
同一个topic中的消息,如果有不同group的消费者的话,是可以重复消费消息的。(如果不想重复消费,就把多个消费者的 group-id/id 配置成一样的)
3.yml中的group-id与@KafkaListener中的id的含义是相同的,需要注意。
更多推荐
所有评论(0)