rocketMq - tag不一致造成的假象

概述

? ? 這篇文章是以同事在實際工作中遇到的問題作為分析的切入點惶室,加深自己對mq的掌握,踐行“干中學(xué)”的團(tuán)隊理念。

? ? 當(dāng)自己差不多把基本概念都掌握的差不多的時候啊终,必須需要實際的案例或者實踐來提深自己的深度疑苔,這個時候just do it 變得很重要甫匹,所以我喜歡不停的被人挑戰(zhàn),截止目前幫人解答的問題包括:client端消息堆積問題惦费、批量消息拉取問題中遇到的神奇的數(shù)字32兵迅、以及本篇的tag不一致造成的假象,也就說會有3篇文章輸出趁餐。

? ? 整個mq的問題解決文章會收錄在mq的另外一個《rocketMq干中學(xué)》專題當(dāng)中喷兼,歡迎訂閱,歡迎挑戰(zhàn)后雷。


背景

????某次線上發(fā)布升級mq的消費(fèi)端修改訂閱的topic對應(yīng)的tags季惯,為了保證穩(wěn)定性,采取了灰度發(fā)布策略臀突,也就說發(fā)布一臺服務(wù)后觀察一段時間看是否正常再全量發(fā)布勉抓。

? ? 升級的內(nèi)容為consumer訂閱的tags信息,灰度一臺之后存在同一個consumeGroup下有多個consumer候学,且其中一個consumer的topic的tags信息和其他consumer不一致藕筋。

? ? 如我們在consumeGroupA下有3個consumer,一開始3個consumer訂閱了topicA + tagA||tagB梳码,然后我們升級一個consumer訂閱topicA+tagC隐圾,這個時候在同一個consumeGroup下針對同一個topic會有兩個不同的訂閱信息。

? ? 升級以后的現(xiàn)象是什么呢掰茶,重要的事情說3遍暇藏,說3遍,說3遍濒蒋。

? ? 升級后我們發(fā)現(xiàn)所有的consumer都沒有消費(fèi)數(shù)據(jù)的記錄盐碱!

?????升級后我們發(fā)現(xiàn)所有的consumer都沒有消費(fèi)數(shù)據(jù)的記錄!?

????升級后我們發(fā)現(xiàn)所有的consumer都沒有消費(fèi)數(shù)據(jù)的記錄沪伙!


復(fù)現(xiàn)

????請按照以下順序進(jìn)行復(fù)現(xiàn)操作

????????1瓮顽、啟動consumeA,負(fù)責(zé)訂閱orderTopic围橡,tags為A||D暖混;

? ? ? ? 2、等待一段時間翁授,待consumeA啟動完成儒恋;

? ? ? ? 3善绎、producer發(fā)送消息,發(fā)現(xiàn)consumeA正常消費(fèi)消息诫尽;

? ? ? ? 4禀酱、啟動consumeB,負(fù)責(zé)訂閱orderTopic牧嫉,tags為F剂跟;

? ? ? ? 5、producet發(fā)送消息酣藻,發(fā)現(xiàn)consumeA和consumerB都沒有消費(fèi)記錄曹洽;

? ? ? ? 6、理論上這個時候consumeA應(yīng)該能夠消費(fèi)(tags一致)辽剧,但是事實上卻沒有送淆。


consumerA


consumerB


producer


原因分析

? ? 在復(fù)現(xiàn)問題以后,基本上你知道離定位問題就不遠(yuǎn)了怕轿,其實對于經(jīng)常出現(xiàn)的問題你只要靜下心去排查問題就不大了偷崩,

我的問題排查理念:

? ? 1、對mq在訂閱topic的過程和消息拉取的過程在心里要有一個宏觀的理解撞羽,說白了在心里面要清楚整個交互過程阐斜,看整個交互過程中是不是可能本身就存在這個邏輯缺陷。

? ? 2诀紊、在原來日志不能夠幫助定位你的問題的時候谒出,在可以獲取源碼的時候增加日志,增加在懷疑的執(zhí)行路徑上邻奠。


我的問題排查過程:

? ? 1笤喳、排查rocketMq訂閱消息的邏輯

? ? 2、排查rocketMq訂閱關(guān)系同步的邏輯


訂閱過程-client端:


消息訂閱及心跳發(fā)送

說明:

? ? 1碌宴、在consumer端訂閱的時候我們會在本地保存一個訂閱數(shù)據(jù)杀狡,在這個訂閱數(shù)據(jù)里面有一個字段非常重要,就是用時間戳來代表的訂閱消息版本信息唧喉。


說明:

? ? 1、定時通過心跳信息發(fā)送訂閱數(shù)據(jù)到broker忍抽,也就是說我們會把訂閱信息多次發(fā)送八孝。

? ? 2、定時同步broker的訂閱信息到client端鸠项,也就是最終都會拷貝到一份最新的訂閱信息干跛。


訂閱信息數(shù)據(jù)結(jié)構(gòu)

說明:

? ? 1、在我們創(chuàng)建SubscriptionData的時候我們其實用時間戳代表了版本號祟绊,這個東西非常重要楼入,因為在broker端我們會通過版本號來區(qū)分最新數(shù)據(jù)哥捕。


訂閱過程-broker端

broker端處理過程-1

說明

? ? broker端處理的入口函數(shù),相當(dāng)于接收consumer的心跳數(shù)據(jù)的處理函數(shù)嘉熊。


broker端處理過程-2

說明:

? ? 核心關(guān)鍵點遥赚,我們每次只會用最新版本號的訂閱數(shù)據(jù)。


消息拉取-server端

broker端處理數(shù)據(jù)拉取

說明

? ? 在broker端進(jìn)行消費(fèi)的時候我們會根據(jù)subscriptionData來判斷這個消息是否屬于tag內(nèi)的消息阐肤,如果不是指定tag的消息凫佛,就返回false直接過濾消息。


消息拉取-client端

client端處理數(shù)據(jù)拉取

說明

? ? client端也做了類似的過濾孕惜,不知道是處于什么考慮愧薛,但是broker端已經(jīng)對消息進(jìn)行了過濾。


結(jié)論

? ? 1衫画、同一個consumeGroup下面的多個client定時向broker發(fā)送心跳信息毫炉,匯報自己最新的subscription信息,broker端在收到消息后以最新版本的訂閱消息為準(zhǔn)削罩。??

? ? 2瞄勾、broker端在收到client拉取消息的請求后,會從broker的store中獲取消息數(shù)據(jù)并以subscription信息去進(jìn)行過濾鲸郊,這個是關(guān)鍵的地方丰榴,broker在獲取數(shù)據(jù)的時候會用最新的subscription去進(jìn)行過濾。

? ? 3秆撮、我們這個現(xiàn)象原因就是舊的subscription(tag為A||D)信息和新的subscription(tag為F)信息不一致四濒,我們以最新的subscription(tag為F)為準(zhǔn),這個時候即便你發(fā)送的消息tag為A||D职辨,在消息消費(fèi)的會因為最新的subscription(tag為F)被過濾掉盗蟆。


其他輔助信息

在消費(fèi)數(shù)據(jù)的時候會不停的打印錯誤日志:NO_MATCHED_MSG

心跳信息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舒裤,隨后出現(xiàn)的幾起案子喳资,更是在濱河造成了極大的恐慌,老刑警劉巖腾供,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仆邓,死亡現(xiàn)場離奇詭異,居然都是意外死亡伴鳖,警方通過查閱死者的電腦和手機(jī)节值,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榜聂,“玉大人搞疗,你說我怎么就攤上這事⌒胨粒” “怎么了匿乃?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵桩皿,是天一觀的道長。 經(jīng)常有香客問我幢炸,道長泄隔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任阳懂,我火速辦了婚禮梅尤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岩调。我一直安慰自己巷燥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布号枕。 她就那樣靜靜地躺著缰揪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葱淳。 梳的紋絲不亂的頭發(fā)上钝腺,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機(jī)與錄音赞厕,去河邊找鬼艳狐。 笑死,一個胖子當(dāng)著我的面吹牛皿桑,可吹牛的內(nèi)容都是我干的毫目。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼诲侮,長吁一口氣:“原來是場噩夢啊……” “哼镀虐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沟绪,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刮便,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绽慈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恨旱,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年坝疼,在試婚紗的時候發(fā)現(xiàn)自己被綠了搜贤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡裙士,死狀恐怖入客,靈堂內(nèi)的尸體忽然破棺而出管毙,到底是詐尸還是另有隱情腿椎,我是刑警寧澤桌硫,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站啃炸,受9級特大地震影響铆隘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜南用,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一膀钠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裹虫,春花似錦肿嘲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匣屡,卻和暖如春封救,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捣作。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工誉结, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人券躁。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓惩坑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘱朽。 傳聞我的和親對象是個殘疾皇子旭贬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容