消息隊列(三)RocketMQ如何存儲消息

Rocket的消息是有consume queue和commit log組成。


Consume Queue

Consume queue是消息的邏輯隊列,相當於字典目錄,用來指定消息在物理文件(commit log)上的位置,我們可以在配置中指定consumequeue和commitlog存儲的目錄。每一個topic下的每個queue都有一個對應的consumqueue文件。

5.png

  • 根據topic和queueid來組織文件,topicA中有2個隊列(0和1),那麼topicA和queueID=0就組成一個consume queue,另外topicA和queueID=1就組成另外一個consume queue

  • 按照消費端的GroupNanme來分組重試隊列,如果消費端消費失敗,消息將被髮往重試隊列,圖中的%RETRY%ConsumerGroupA

  • 按照消費端的GroupName來分組死信隊列,如果消費端消費失敗,並重試指定次數後,仍然失敗,則發往死信隊列(用於存放無法傳遞的消息),圖中的%DLQ%ConsumerGroupA

Consume queue中的存儲單元是20字節長度的二進制數據,順序讀寫

6.png

  • commitLog Offset,這條消息在commit log中的實際偏移量

  • size存儲的是這條消息的大小

  • message tag hashcode,是存儲這個消息的TAG的哈希值,用於訂閱時消息過濾


Commit Log

消息存放的物理文件,每臺broker上的commit log被本機所有的queue共享不做任何區分。消息存儲內容長度不固定,文件順序寫,隨機讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章