rocketMq-broker消息存儲介紹

系列

rocketMq概念介紹

rocketMq-namesrv介紹

rocketMq-Topic創(chuàng)建過程

rocketMq-producer介紹

rocketMq-consumer介紹

rocketMq - rebalance介紹

rocketMq - 并發(fā)消費過程

rocketMq - 串行消費過程

rocketMq-broker介紹

rocketMq-broker消息存儲介紹

rocketMq - commitLog

rocketMq - index介紹

rocketMq-延遲消息介紹

rocketMq-事務(wù)消息介紹

rocketMq消息查詢

rocketMq和kafka的架構(gòu)區(qū)別

rocketMq - master/slave同步


broker的消息存儲做了那些事

????rocketMq的broker消息存儲主要包括3個部分立砸,分別commitLog的存儲涵卵,consumeQueue的存儲泄朴,index的存儲,這章分享會把這三個過程分解清楚间螟,同時會對里面涉及的存儲位置的偏移量著重講解清楚肉迫。

? ? 1、commitLog的存儲是producer發(fā)送消息給broker端broker同步處理的

? ? 2甲喝、consumeQueue和index兩者存儲其實是一個定時任務(wù)從commitLog中獲取偏移量然后存儲過去的

? ? 3、consumeQueue和index的存儲 與 commitLog的存儲是隔離開的铛只,非同步的


broker的消息存儲過程


消息存儲過程

說明:分享自再說rocketmq消息存儲埠胖。

? ? 1糠溜、commitLog其實有兩層夠?qū)樱渲蠱appendFileQueue是邏輯的存儲隊列概念直撤,里面保存著順序增長的MappedFile文件非竿。

? ? 2、MappedFile文件是真正存儲實際數(shù)據(jù)的文件

? ? 3谋竖、在整個broker的存儲體系中红柱,MappedFile文件保存了commitLog、consumeQueue蓖乘、Index等锤悄,是核心的數(shù)據(jù)結(jié)構(gòu)。


broker的消息存儲過程


注冊消息消費函數(shù)

說明:參見BrokerController類

? ? 1嘉抒、其中sendProcessor就是broker端接收message的入口函數(shù)


處理發(fā)送消息

說明:參見SendMessageProcessor類

? ? 1铁蹈、這里我們先看下單個消息的處理過程,也就是sendMessage過程


組裝消息并開始存儲

說明:參見SendMessageProcessor類

? ? 1众眨、putMessage函數(shù)開始執(zhí)行數(shù)據(jù)的保存


commitLog消息存儲

說明:參見DefaultMessageStore類

? ? 1握牧、commitLog.putMessage開始進(jìn)入commitLog的保存邏輯


獲取mappedFile文件并存儲消息

說明:參見CommitLog類

????1、先從mappedFileQueue獲取最后一個MappedFile文件娩梨,如果為空就創(chuàng)建一個commitLog對應(yīng)的MappedFile文件沿腰,文件命名以實際以文件大小命名,分別是00000000000000000000狈定、00000000001073741824颂龙、00000000002147483648,文件名之間差1G=1024*1024*1224B=1073741824纽什。每個commitLog的MappedFile文件大小是1G措嵌,剩余多余無非存入新消息就用填充字符填充到1G。

????2芦缰、mappedFile.appendMessage執(zhí)行保存消息到MappedFile的動作


通過回調(diào)函數(shù)來執(zhí)行message的保存

說明:參見MappedFile類

? ? 1企巢、這里我們以單個消息存儲為例繼續(xù)說明



計算存儲位置及計算consumeQueue偏移

說明:參見CommitLog類

? ? 1、做一些前置準(zhǔn)備让蕾,包括計算下一個存儲位置等



判斷剩余空間

說明:參見CommitLog類

? ? 1浪规、這里有個特別的地方需要注意,就是如果剩余空間無法裝下消息+8個字節(jié)的結(jié)束標(biāo)識符探孝,就默認(rèn)結(jié)束了笋婿,結(jié)束標(biāo)識符應(yīng)該用于標(biāo)識mappedFile是否結(jié)束。


按照格式寫入緩存

說明:參見CommitLog類

? ? 1顿颅、這里的消息寫入過程我們分析暫時到寫入緩存就結(jié)束了缸濒,真正實際上是還會有刷盤的動作的,這里暫時不展開分析,后續(xù)單獨開一章刷盤的的分析庇配。


消息存儲格式

說明:

? ? commitLog的MappedFile文件中保存的數(shù)據(jù)格式如上圖所示斩跌,在末尾不能保存整個消息的時候就會重新生成一個MappedFile文件,當(dāng)然在末尾應(yīng)該會有填充結(jié)束標(biāo)識符讨永,文件結(jié)束符是以特殊magic_code結(jié)束的,為BLANK_MAGIC_CODE=0xBBCCDDEE ^1880681586 +8;


comsumeQueue的存儲過程


consumeQueue的保存過程

說明:參見DefaultMessageStore類

? ? 1遇革、該實現(xiàn)類是一個線程函數(shù)卿闹,內(nèi)部通過run操作循環(huán)去commitLog去消息位移信息保存到consumeQueue當(dāng)中



循環(huán)拉取commitLog消息并生成dispatch消息

說明:參見DefaultMessageStore類



dispatchList保存consumeQueue和index

說明:參見DefaultMessageStore類

? ? 1、this.dispatcherList.addLast(new CommitLogDispatcherBuildConsumeQueue());

? ? ?2萝快、this.dispatcherList.addLast(new CommitLogDispatcherBuildIndex());



consumeQueue保存操作



consumeQueue保存邏輯

說明:參見ConsumeQueue類

? ? 1锻霎、ConsumeQueue的消息單元格式如下圖。


ConsumeQueue的消息格式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揪漩,一起剝皮案震驚了整個濱河市旋恼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奄容,老刑警劉巖冰更,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昂勒,居然都是意外死亡蜀细,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門戈盈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奠衔,“玉大人,你說我怎么就攤上這事塘娶」榻铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵刁岸,是天一觀的道長脏里。 經(jīng)常有香客問我,道長虹曙,這世上最難降的妖魔是什么膝宁? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮根吁,結(jié)果婚禮上员淫,老公的妹妹穿的比我還像新娘。我一直安慰自己击敌,他們只是感情好介返,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般圣蝎。 火紅的嫁衣襯著肌膚如雪刃宵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天徘公,我揣著相機與錄音牲证,去河邊找鬼。 笑死关面,一個胖子當(dāng)著我的面吹牛坦袍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播等太,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼捂齐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缩抡?” 一聲冷哼從身側(cè)響起奠宜,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞻想,沒想到半個月后压真,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蘑险,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年榴都,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漠其。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘴高,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出和屎,到底是詐尸還是另有隱情拴驮,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布柴信,位于F島的核電站套啤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏随常。R本人自食惡果不足惜潜沦,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绪氛。 院中可真熱鬧唆鸡,春花似錦、人聲如沸枣察。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至臂痕,卻和暖如春伯襟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背握童。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工姆怪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澡绩。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓稽揭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親英古。 傳聞我的和親對象是個殘疾皇子淀衣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理昙读,服務(wù)發(fā)現(xiàn)召调,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,713評論 13 425
  • 本來昨天晚上已經(jīng)寫好一文蛮浑,但是關(guān)于寶馬事件唠叛,早上在大群討論的這么激烈,我還是要寫一寫對這件事情的看法沮稚。 我要說艺沼,對...
    蛻變的林林閱讀 680評論 2 0
  • 在有限的生命里盛杰,能多一些慢下來的時光挽荡,日子就會少些羈絆和框約,多些潤澤和散淡即供。然而定拟,在這千帆競發(fā)的時光里,誰...
    靜悟不語閱讀 178評論 0 0
  • 和姥姥躺在床上聊天逗嫡,說到姥爺青自,說到大舅,說到我爸驱证。說的我想哭延窜。忽然說到我小時候。最近記性特別差抹锄,對很多往事都記不清...
    梓語crazy閱讀 243評論 0 0