持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
前言
当当当~没错我又来了,这次我带着rocketMQ的答案走来了,前面几篇有讲述过RocketMQ的事故过程,以及事故的起因是咋回事,今天终于把这个问题解决了,太痛苦了。又是看源码,又是看官方文档的。这里强烈批评一下阿里的项目啊,真的是kpi工程,写都不写明白,好歹标个重点哇。
事故分析
ROcketMQ在昨天遇到了无法消费问题,跟去往期流程我们订阅到了问题是消费者不消费的问题,今天带着这个问题我便去寻找了一下百度,google到处寻找解决办法,网上查到都说是订阅问题,说是一个consumer 对应两个topicClientId,然后我便试了一下使用了4个consumer.start 代码如下:
启动了5个start然后观察console的topic的clientId消费是否正常,结果发现topic竟然queue队列0竟然没有人订阅,其他3个都有人订阅,对了我这里设置的queue队列是1。然后发现这个事情后我开始意识到了是什么问题,有没有可能borker在存储消息时扔在了0队列导致消费者消费时因为没有订阅者而丢弃消息,导致我的服务消费不正常呢?
解决问题
带着这个问题我创建了大量的消费者发现我根本填不满queue队列0说明客户端数量与clientid并不对等,然后百度了一番发现rocketMq竟然同一消费者有不同的tag或topic时消费会被负载均衡,负载均衡是正常但是他会出现消息不对丁不一致的问题,然后我赶紧去换了一个消费组发现正常使用了,所有client订阅都订阅了。至此bug解决了,最后奉上一句消费者组的每一个消费逻辑一定要一致,如果不一致会出现消费丢弃行为。