RocketMQ消息轨迹-设计篇
RocketMQ 消息軌跡主要包含兩篇文章:設(shè)計(jì)篇與源碼分析篇,本節(jié)將詳細(xì)介紹RocketMQ消息軌跡-設(shè)計(jì)相關(guān)。
RocketMQ消息軌跡,主要跟蹤消息發(fā)送、消息消費(fèi)的軌跡,即詳細(xì)記錄消息各個(gè)處理環(huán)節(jié)的日志,從設(shè)計(jì)上至少需要解決如下三個(gè)核心問題:
- 消費(fèi)軌跡數(shù)據(jù)格式
- 記錄消息軌跡(消息日志)
- 消息軌跡數(shù)據(jù)存儲(chǔ)在哪?
1、消息軌跡數(shù)據(jù)格式
RocketMQ4.5版本消息軌跡主要記錄如下信息:
- traceType
跟蹤類型,可選值:Pub(消息發(fā)送)、SubBefore(消息拉取到客戶端,執(zhí)行業(yè)務(wù)定義的消費(fèi)邏輯之前)、SubAfter(消費(fèi)后)。 - timeStamp
當(dāng)前時(shí)間戳。 - regionId
broker所在的區(qū)域ID,取自BrokerConfig#regionId。 - groupName
組名稱,traceType為Pub時(shí)為生產(chǎn)者組的名稱;如果traceType為subBefore或subAfter時(shí)為消費(fèi)組名稱。 - requestId
traceType為subBefore、subAfter時(shí)使用,消費(fèi)端的請求Id。 - topic
消息主題。 - msgId
消息唯一ID。 - tags
消息tag。 - keys
消息索引key,根據(jù)該key可快速檢索消息。 - storeHost
跟蹤類型為PUB時(shí)為存儲(chǔ)該消息的Broker服務(wù)器IP;跟蹤類型為subBefore、subAfter時(shí)為消費(fèi)者IP。 - bodyLength
消息體的長度。 - costTime
耗時(shí)。 - msgType
消息的類型,可選值:Normal_Msg(普通消息),Trans_Msg_Half(預(yù)提交消息),Trans_msg_Commit(提交消息),Delay_Msg(延遲消息)。 - offsetMsgId
消息偏移量ID,該ID中包含了broker的ip以及偏移量。 - success
是發(fā)送成功。 - contextCode
消費(fèi)狀態(tài)碼,可選值:SUCCESS,TIME_OUT,EXCEPTION,RETURNNULL,FAILED。
2、記錄消息軌跡
消息中間件的兩大核心主題:消息發(fā)送、消息消費(fèi),其核心載體就是消息,消息軌跡(消息的流轉(zhuǎn))主要是記錄消息是何時(shí)發(fā)送到哪臺(tái)Broker,發(fā)送耗時(shí)多少時(shí)間,在什么是被哪個(gè)消費(fèi)者消費(fèi)。記錄消息的軌跡主要是集中在消息發(fā)送前后、消息消費(fèi)前后,可以通過RokcetMQ的Hook機(jī)制。通過如下兩個(gè)接口來定義鉤子函數(shù)。
通過實(shí)行上述兩個(gè)接口,可以實(shí)現(xiàn)在消息發(fā)送、消息消費(fèi)前后記錄消息軌跡,為了不明顯增加消息發(fā)送與消息消費(fèi)的時(shí)延,記錄消息軌跡最好使用異步發(fā)送模式。
3、如何存儲(chǔ)消息軌跡數(shù)據(jù)
消息軌跡需要存儲(chǔ)什么消息以及在什么時(shí)候記錄消息軌跡的問題都以及解決,那接下來就得思考將消息軌跡存儲(chǔ)在哪里?存儲(chǔ)在數(shù)據(jù)庫中或其他媒介中,都會(huì)加重消息中間件,使其依賴外部組件,最佳的選擇還是存儲(chǔ)在Broker服務(wù)器中,將消息軌跡數(shù)據(jù)也當(dāng)成一條消息存儲(chǔ)到Broker服務(wù)器。
既然把消息軌跡當(dāng)成消息存儲(chǔ)在Broker服務(wù)器,那存儲(chǔ)消息軌跡的Topic如何確定呢?RocketMQ提供了兩種方法來定義消息軌跡的Topic。
- 系統(tǒng)默認(rèn)Topic
如果Broker的traceTopicEnable配置設(shè)置為true,表示在該Broker上創(chuàng)建topic名為:RMQ_SYS_TRACE_TOPIC,隊(duì)列個(gè)數(shù)為1,默認(rèn)該值為false,表示該Broker不承載系統(tǒng)自定義用于存儲(chǔ)消息軌跡的topic。 - 自定義Topic
在創(chuàng)建消息生產(chǎn)者或消息消費(fèi)者時(shí),可以通過參數(shù)自定義用于記錄消息軌跡的Topic名稱,不過要注意的是,rokcetmq控制臺(tái)(rocketmq-console)中只支持配置一個(gè)消息軌跡Topic,故自定義Topic,在目前這個(gè)階段或許還不是一個(gè)最佳實(shí)踐,建議使用系統(tǒng)默認(rèn)的Topic即可。
通常為了避免消息軌跡的數(shù)據(jù)與正常的業(yè)務(wù)數(shù)據(jù)混合在一起,官方建議,在Broker集群中,新增加一臺(tái)機(jī)器,只在這臺(tái)機(jī)器上開啟消息軌跡跟蹤,這樣該集群內(nèi)的消息軌跡數(shù)據(jù)只會(huì)發(fā)送到這一臺(tái)Broker服務(wù)器上,并不會(huì)增加集群內(nèi)原先業(yè)務(wù)Broker的負(fù)載壓力。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的RocketMQ消息轨迹-设计篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当你打开天猫的那一刻,推荐系统做了哪些工
- 下一篇: 开放计算架构:蚂蚁金服是如何用一套架构容