訊息儲存的地方,資料夾下有多個檔案,每個檔案的大小預設為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:對映的檔名相同型別檔案集中管理的地方,管理著mapedfile,其中的檔案大小相同,儲存位置相同filefromoffset:對映的起始偏移量,拿
commitlog
檔案來舉例,下面有很多個資料夾
(假設為
1kb,預設是
1g大小
),第乙個檔名為
00000000000000000000
,第二個檔名為
00000000000000001024
,那麼第乙個檔案的
filefromoffset就是0
,第二個檔案的
filefromoffset
就是1024
filesize:檔案大小
wrotepostion:記錄當前檔案寫到什麼檔案
committedposition:記錄當前檔案刷盤刷到哪個位置
主要字段解釋:
storepath:檔案儲存位置物理佇列,對外提供訊息的處理介面,內部操作mapedfilequeuemapedfilesize:每個檔案的大小
mapedfiles:
mapedfile
的集合,代表著各個檔案
邏輯佇列,對應著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...