RocketMQ原始碼分析 訊息儲存

2021-07-27 13:54:16 字數 2844 閱讀 2661

訊息儲存的地方,資料夾下有多個檔案,每個檔案的大小預設為1g

訊息的組成:

欄位名(長度)

備註totalsize(4)

訊息的長度

magiccode(4)

bodycrc(4)

body的校驗碼

queueid(4)

佇列id

flag(4)

queueoffset(8)

儲存著佇列下訊息的數量,該值儲存在commitlog

的topicqueuetable(map)

中,key

為topic-queueid

physicaloffset(8)

commitlog裡的

offset

=filefromoffset+bytebuffer當前的位置

sysflag(4)

用來判斷訊息的型別

borntimestamp(8)

訊息產生的時間

bornhost(8)

傳送訊息的consumer的ip

storetimestamp(8)

儲存時間

storehostaddress(8)

儲存的broker

的位址

reconsumetimes(4)

重新消費的次數

prepared transaction offset(4)

事務狀態的訊息

bodylength(4)

訊息體大小

body

訊息體topiclength(1)

topic大小

topicdata

topic

propertieslength(2)

屬性大小

propertiesdata

屬性consumequeue下有多個資料夾,名字為

topic

的名字

topic下有多個資料夾,名字為該

topic

下佇列,

0~3(

假設有4

個佇列)

然後下面就是儲存consumequeue資料的檔案

組成:commitlog offset(8)

儲存的值為commitlog

的physicaloffset

size(4)

儲存的值為commitlog

的totalsize

message tag hashcode(8)

tag的雜湊值

在取訊息的時候,會先用offset取出

consumequeue

,然後從

consumequeue

中取出commitlog offset

,然後再到

commitlog

裡取訊息

config資料夾下主要儲存:

consumeroffset.json:客戶端消費

offset

內容如下:

delayoffset.json:延遲消費資訊

subscriptiongroup.json:訂閱資訊

topics.json:

topic資訊

rocketmq的索引,傳送訊息之後可以通過

querymsgbykey

來查詢訊息

組成:key hash(4)

commitlog offset(8)

timestamp(4)

next index offset(4)

key的

hash值

commitlog的物理偏移量

phyoffset

儲存了當前訊息跟索引檔案中第乙個訊息在broker

落地的時間差

如果存在hash

bytebuffer的封裝,建立檔案,寫入訊息,讀取訊息等操作都是在這裡做的

主要字段解釋:

filename:對映的檔名

filefromoffset:對映的起始偏移量,拿

commitlog

檔案來舉例,下面有很多個資料夾

(假設為

1kb,預設是

1g大小

),第乙個檔名為

00000000000000000000

,第二個檔名為

00000000000000001024

,那麼第乙個檔案的

filefromoffset就是0

,第二個檔案的

filefromoffset

就是1024

filesize:檔案大小

wrotepostion:記錄當前檔案寫到什麼檔案

committedposition:記錄當前檔案刷盤刷到哪個位置

相同型別檔案集中管理的地方,管理著mapedfile,其中的檔案大小相同,儲存位置相同

主要字段解釋:

storepath:檔案儲存位置

mapedfilesize:每個檔案的大小

mapedfiles:

mapedfile

的集合,代表著各個檔案

物理佇列,對外提供訊息的處理介面,內部操作mapedfilequeue

邏輯佇列,對應著consumequeue下的檔案,其中儲存著

commitlog

的位置

RocketMQ 位移提交原始碼分析

rocketmq 訊息消費進度是如何提交的,併發消費的時候,一次從 乙個佇列拉 32 條訊息,這 32 條訊息會提交到執行緒池中處理,如果偏移量 m5 比 m4 先執行完成,訊息消費後,提交的消費進度是哪個?是提交訊息 m5 的偏移量?下面跟著我的節奏,擼一波原始碼。rocketmq 每次拉取完訊息...

rocketmq原始碼分析之broker心跳檢測

1.brokercontroller傳送心跳包 org.apache.rocketmq.broker.brokercontroller start 向所有的namesrv註冊broker資訊 this.registerbrokerall true,false,true 週期性註冊broker資訊,b...

除錯RocketMQ原始碼

拷貝namesrv broker的配置檔案到指定目錄,為了避免直接修改 中的配置檔案。1.1 在f盤建立rocketmq資料夾,建立三個子資料夾conf logs store,我的 中多了dev data的資料夾 1.2 將distribution原始碼conf目錄下的broker.conf log...