天天看點

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

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

Consume Queue

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

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

根據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位元組長度的二進制資料,順序讀寫

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

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

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

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

Commit Log

消息存放的實體檔案,每台broker上的commit log被本機所有的queue共享不做任何區分。消息存儲内容長度不固定,檔案順序寫,随機讀。

繼續閱讀