RocketMQ消息軌跡-設計篇

2021-01-07 阿里云云棲號

RocketMQ 消息軌跡主要包含兩篇文章:設計篇與源碼分析篇,本節將詳細介紹RocketMQ消息軌跡-設計相關。

RocketMQ消息軌跡,主要跟蹤消息發送、消息消費的軌跡,即詳細記錄消息各個處理環節的日誌,從設計上至少需要解決如下三個核心問題:

消費軌跡數據格式記錄消息軌跡(消息日誌)消息軌跡數據存儲在哪?1、消息軌跡數據格式

RocketMQ4.5版本消息軌跡主要記錄如下信息:

traceType跟蹤類型,可選值:Pub(消息發送)、SubBefore(消息拉取到客戶端,執行業務定義的消費邏輯之前)、SubAfter(消費後)。timeStamp當前時間戳。regionIdbroker所在的區域ID,取自BrokerConfig#regionId。groupName組名稱,traceType為Pub時為生產者組的名稱;如果traceType為subBefore或subAfter時為消費組名稱。requestIdtraceType為subBefore、subAfter時使用,消費端的請求Id。topic消息主題。msgId消息唯一ID。tags消息tag。keys消息索引key,根據該key可快速檢索消息。storeHost跟蹤類型為PUB時為存儲該消息的Broker伺服器IP;跟蹤類型為subBefore、subAfter時為消費者IP。bodyLength消息體的長度。costTime耗時。msgType消息的類型,可選值:Normal_Msg(普通消息),Trans_Msg_Half(預提交消息),Trans_msg_Commit(提交消息),Delay_Msg(延遲消息)。offsetMsgId消息偏移量ID,該ID中包含了broker的ip以及偏移量。success是發送成功。contextCode消費狀態碼,可選值:SUCCESS,TIME_OUT,EXCEPTION,RETURNNULL,FAILED。2、記錄消息軌跡

消息中間件的兩大核心主題:消息發送、消息消費,其核心載體就是消息,消息軌跡(消息的流轉)主要是記錄消息是何時發送到哪臺Broker,發送耗時多少時間,在什麼是被哪個消費者消費。記錄消息的軌跡主要是集中在消息發送前後、消息消費前後,可以通過RokcetMQ的Hook機制。通過如下兩個接口來定義鉤子函數。

通過實行上述兩個接口,可以實現在消息發送、消息消費前後記錄消息軌跡,為了不明顯增加消息發送與消息消費的時延,記錄消息軌跡最好使用異步發送模式。

3、如何存儲消息軌跡數據

消息軌跡需要存儲什麼消息以及在什麼時候記錄消息軌跡的問題都以及解決,那接下來就得思考將消息軌跡存儲在哪裡?存儲在資料庫中或其他媒介中,都會加重消息中間件,使其依賴外部組件,最佳的選擇還是存儲在Broker伺服器中,將消息軌跡數據也當成一條消息存儲到Broker伺服器。

既然把消息軌跡當成消息存儲在Broker伺服器,那存儲消息軌跡的Topic如何確定呢?RocketMQ提供了兩種方法來定義消息軌跡的Topic。

系統默認Topic如果Broker的traceTopicEnable配置設置為true,表示在該Broker上創建topic名為:RMQ_SYS_TRACE_TOPIC,隊列個數為1,默認該值為false,表示該Broker不承載系統自定義用於存儲消息軌跡的topic。自定義Topic在創建消息生產者或消息消費者時,可以通過參數自定義用於記錄消息軌跡的Topic名稱,不過要注意的是,rokcetmq控制臺(rocketmq-console)中只支持配置一個消息軌跡Topic,故自定義Topic,在目前這個階段或許還不是一個最佳實踐,建議使用系統默認的Topic即可。通常為了避免消息軌跡的數據與正常的業務數據混合在一起,官方建議,在Broker集群中,新增加一臺機器,只在這臺機器上開啟消息軌跡跟蹤,這樣該集群內的消息軌跡數據只會發送到這一臺Broker伺服器上,並不會增加集群內原先業務Broker的負載壓力。

相關焦點

  • 雲原生時代 RocketMQ 運維管控的利器 - RocketMQ Operator
    RocketMQ2012~2013 年期間,阿里巴巴中間件團隊自主研發並對外開源了第三代分布式消息引擎 RocketMQ,其高性能、低延遲、抗堆積的特性穩定支撐了阿里巴巴 雙11 萬億級數據洪峰業務,其雲產品 Aliware MQ 在微服務、流計算、IoT、異步解耦、數據同步等無數工況場景大放異彩。
  • 在CentOS7上安裝RocketMQ 4.7.1
    mv rocketmq-all-4.7.1-bin-release /usr/local  ln -s /usr/local/rocketmq-all-4.7.1-bin-release /usr/local/rocketmq
  • docker-4:mac使用docker部署開發用rocketmq
    目錄:(1).mac本地docker化rocketmq(2).mac本地docker化rocketmq-console(3).測試(1).mac本地docker化rocketmq現在官方rocketmq-docker:git clone https://github.com/apache/rocketmq-docker
  • Apache RocketMQ 4.4.0 發布 - OSCHINA - 中文開源技術交流社區
    萬眾期待的 4.4.0 版本終於在昨天成功發布,值得關注的新特性包括權限控制(ACL)和消息軌跡(Msg Trace)。
  • RocketMQ消息發送常見錯誤與解決方案
    通常情況下 No route info of this topic 這個錯誤一般是在剛搭建RocketMQ,剛入門 RocketMQ遇到的比較多,通常的排查思路如下:可以通過rocketmq-console查詢路由信息是否存在,或使用如下命令查詢路由信息:cd ${ROCKETMQ_HOME}/binsh .
  • 想了解Kafka,RabbitMQ,ZeroMQ,RocketMQ,ActiveMQ之間的差異?這一篇文章就夠了!
    當新節點加入鏡像隊列的時候,隊列中的消息不會同步到新的slave中,除非調用同步命令,但是調用命令後,隊列會阻塞,不能在生產環境中調用同步命令。2>當rabbitmq隊列擁有多個消費者的時候,隊列收到的消息將以輪詢的分發方式發送給消費者。每條消息只會發送給訂閱列表裡的一個消費者,不會重複。這種方式非常適合擴展,而且是專門為並發程序設計的。
  • 想了解 Kafka, RabbitMQ, ZeroMQ, RocketMQ, ActiveMQ 之間的差異?這一篇文章就夠了!
    當新節點加入鏡像隊列的時候,隊列中的消息不會同步到新的slave中,除非調用同步命令,但是調用命令後,隊列會阻塞,不能在生產環境中調用同步命令。2>當rabbitmq隊列擁有多個消費者的時候,隊列收到的消息將以輪詢的分發方式發送給消費者。每條消息只會發送給訂閱列表裡的一個消費者,不會重複。這種方式非常適合擴展,而且是專門為並發程序設計的。
  • RocketMQ CPP客戶端更新至1.2.0,兼容多語言、簡化項目編譯流程
    支持消息壓縮;5. 支持建立消息消費模式; 1. 增強了多平臺支持能力,如Linux、Windows和MacOS;2. 簡化了項目的編制方法,一個命令即可編譯整個項目。 1.修復了一個關於唯一密鑰的問題,即當發送消息時,生產者不能獲得唯一密鑰; 項目地址:https://github.com/apache/rocketmq-client-cpp
  • 進階必看的 RocketMQ,就這篇了!
    今天和大家一起深入生產級別消息中間件 - RocketMQ 的內核實現,來看看真正落地能支撐萬億級消息容量、低延遲的消息隊列到底是如何設計的。這篇文章我會先介紹整體的架構設計,然後再深入各核心模塊的詳細設計、核心流程的剖析。還會提及使用的一些注意點和最佳實踐。
  • Falcom《軌跡》系列最新消息:最新作《黎之軌跡》2021年發售
    根據日本速報站透露的新消息,目前Falcom《軌跡》系列遊戲目前又有新情報,以下為此次透露的相關細節。 PS4遊戲《那由多之軌跡改》將於2021年發售; Switch遊戲《英雄傳說閃之軌跡4》將於2021年3月18日發售;
  • 《軌跡》系列新作《黎之軌跡》明年發售 《閃之軌跡4》​​...
    據速報消息,《軌跡》系列最新作《黎之軌跡》將於2021年發售。經典遊戲《那由多之軌跡 改》將於2021年登陸PS4平臺。而《英雄傳說:閃之軌跡4》則將於​​​​2021年3月18日登陸Switch平臺。
  • Apache RocketMQ 4.8.0 發布,升級 DLedger 模式
    在原本的架構中, SendMessageProcessor 線程對每一個消息的處理,都需要等待多數派複製成功確認,才會返回給客戶端,而在新版本中,利用 CompletableFuture 對線程處理消息的過程進行異步化改造,
  • 這些MQ概念你都懂嗎:死信隊列、重試隊列、消息回溯等
    消息隊列(MQ)的基本概念,很多時候都要了解清楚,這樣在學消息隊列中間件就比較能夠遊刃有餘,遇到不清楚的也可以重新翻來看看,加深理解。這裡有關於:優先級隊列、延遲隊列、死信隊列、重試隊列、消息回溯、消息堆積、消息追蹤/消息軌跡、消息過濾、消息審計、消息路由等的介紹。
  • 版式設計中的視覺運動軌跡
    文/呂莎莎 在版式設計中,不同的排版、構圖,不同的視覺元素組合相互作用,都會讓觀者的視覺生理產生反應,從而引導視覺進行運動,這個過程就可以稱之為視覺流程,運動所產生的運動軌跡,就叫做視覺運動軌跡。不同的版面中視覺運動軌跡也是不同的,每個版面的表達方式、所期待的效果、所傳達的信息不同,就會產生不同的視覺流程,從而產生不同的視覺運動軌跡。根據視覺流動的方向性不同,可以分為線型視覺運動軌跡與重心導向式視覺運動軌跡。線型視覺運動軌跡①直線型視覺運動軌跡。
  • Apache RocketMQ 4.4.0 發布,5.0 快要到來
    近日,Apache RocketMQ 發布了 v4.4.0,該版本主要增加了權限控制(ACL)和消息軌跡(Message Trace
  • 騰訊T4總結消息隊列+協議+RabbitMQ+ActiveMQ+Kafka+RocketMQ真香
    消息中間件適用於需要可靠的數據傳送的分布式環境。採用消息中間件機制的系統中,不同的對象之間通過傳遞消息來激活對方的事件,完成相應的操作。發送者將消息發送給消息伺服器,消息伺服器將消息存放在若干隊列中,在合適的時候再將消息轉發給接收者。
  • 【瀋陽疫情最新消息!瀋陽新增1例本土確診病例 病患詳情及行程軌跡...
    【瀋陽疫情最新消息!瀋陽新增1例本土確診病例 病患詳情及行程軌跡公布】12月27日,瀋陽市1例新冠病毒無症狀感染者轉為確診病例,為境外輸入病例尹某某的密切接觸者,現已轉入定點醫療機構隔離治療,病情穩定。相關人員情況及行程軌跡:王某某,女,70歲,中國籍,家庭住址:瀋陽市皇姑區崑山西路向工北小區。
  • 面試官再問我如何保證 RocketMQ 不丟失消息,這回我笑了!
    最近看了 @JavaGuide發布的一篇『面試官問我如何保證Kafka不丟失消息?我哭了!』,這篇文章承接這個主題,來聊聊如何保證 RocketMQ 不丟失消息。0x00.消息的發送流程一條消息從生產到被消費,將會經歷三個階段:生產階段,Producer 新建消息,然後通過網絡將消息投遞給 MQ Broker存儲階段,消息將會存儲在 Broker 端磁碟中消息階段, Consumer 將會從 Broker 拉取消息以上任一階段都可能會丟失消息,我們只要找到這三個階段丟失消息原因,採用合理的辦法避免丟失,就可以徹底解決消息丟失的問題。
  • 《英雄傳說:閃之軌跡4》英文版2021年登陸Switch與PC
    雖然一直以來,Falcom的遊戲都十分青睞PlayStation平臺,然而隨著伊蘇8、零之軌跡等作品登陸Switch。作為軌跡系列的帝國篇,《英雄傳說:閃之軌跡3》也登陸了Switch平臺,不過前兩作卻沒有登陸Switch,這也讓Switch玩家感到疑惑。