問題現象
今天忽然收到RocketMQ預警資訊如下:
提醒有部分資料沒有消費,產生堆積情況。
開啟RocketMq-Console-Ng檢視如下圖形式:
備註:第一反應是Consumer Group內訂閱了多個topic?(為什麼這麼懷疑,下次分析)。
通過命令statsAll 作用是查詢Topic and Consumer tps stats:
sh mqadmin statsAll -n namesrv
發現沒有問題,很奇怪?還好之前原始碼看過,只能除錯原始碼了。
原始碼除錯
本篇不重點講解原始碼過程,後續有空再慢慢分析原始碼部分,消費端為了實現負載均衡器,每次當有結點新增或者減少都會重新doRebalance,預設選擇的就是獲取所有佇列以及得到對應group下面所有的cidAll(所有的消費端),之後類似於分頁操作差不多……
進行斷點到該位置發現奇怪現象:
看到這裡就明白了為什麼RocketMq-Console-Ng檢視下面很多是空白的沒有消費端了,由於cidAll的0、2、3一樣一共有16個佇列,cidAll顯示4個 那麼每個客戶端應該是分配4個的,但是由於0、2、3都一樣 就分配一次的。
原始碼部分:
備註: 現象是什麼大概清楚了,下面的重點是為什麼會出現這樣的情況呢?
問題排查
通過RocketMQ命令查詢結果還是一樣:
看到這裡讓我不禁懷疑是否消費例項啟動多次,檢視程式碼依然沒有,實在沒辦法偶然檢視了下tomcat的配置,驚喜的發現:
與該使用方交流發現是的確是沒有重啟部署了,重啟問題解決。
待解決
回頭看看為什麼會這樣,RocketMQ很多流程有點忘記了,抽空再過一遍,把這個問題梳理下。
天僅僅只是開始,期待你的持續關注,讓我們一起走進rocketmq的世界!!!
往期rocketmq系列文章
- 讓你rocketmq用得比預期要好的 1 種方法
- RocketMQ(一):原始碼除錯
- rocketmq番外篇(一):開發命令列
- RocketMQ(六):namesrv再探
- RocketMQ(五):namesrv初探
- CRC 校驗
- RocketMQ(二):RPC通訊
- RocketMQ解惑篇
- RocketMQ快速入門
- MQ 應用場景
- RocketMQ叢集部署配置
- 阿里RocketMQ
如果讀完覺得有收穫的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!
加入知識星球,一起探討!