RocketMQ版本:3.4.6java
RocketMQ集羣的某個topic,在一部分節點上消費有「斷層」,這部分數據一致沒辦法消費。shell
一頓操做猛如虎的調查以後發現,spa
該Topic的消費者的客戶端鏈接數不正確。orm
程序中設置的客戶端數明明是4個,blog
可是Web頁面上顯示的是5個。進程
OK,如何才能知道這些客戶端程序究竟是哪些呢?io
看了一下RocketMQ的命令列表,發現裏面有一個命令好像有戲。集羣
用這個命令嘗試了一下,果真有效。grep
命令:sh /home/hadmin/alibaba-rocketmq/bin/mqadmin consumerConnection -n "10.11.2.4:9876;10.11.2.5:9876" -g face2程序
用這個命令能夠查看出,這個消費組的客戶端是在哪一個節點上,佔用的端口號是哪一個。
將正常的客戶端鏈接斷開(用的Storm消費,把Storm的拓撲kill掉就能夠了)
再次使用這個命令,就能夠查看出,究竟是哪一個程序在搗鬼了。
發如今10.11.2.9節點上,54681這個端口的java程序啓動了一個客戶端鏈接。
到10.11.2.9上查看一下是哪一個程序。
命令:netstat -anp | grep 54681 查看佔用端口的java進程號是43021。
命令:ps -ef | grep 43021 查看啓動這個進程的java程序。
咱們的場景是用Storm來消費RocketMQ。
可是,在咱們kill拓撲的時候,因爲storm的緣由,
偶爾會有一些worker不能被kill掉,變成「殭屍進程」
上述問題中,莫名其妙多出的1個客戶端鏈接就是殭屍進程引發的,
將上述發現的殭屍進程kill掉以後,問題就解決了。
Storm的拓撲kill以後,建議檢查是否有殭屍進程存在。能夠寫一個shell腳本檢查。