這篇文章主要為大家展示了“RocketMQ中broker消息存儲(chǔ)架構(gòu)是怎么樣的”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“RocketMQ中broker消息存儲(chǔ)架構(gòu)是怎么樣的”這篇文章吧。
10年積累的成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有奈曼免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一個(gè)broker下所有topic的消息都順序存儲(chǔ)在同一個(gè)數(shù)據(jù)日志文件(commit log file)中。同時(shí)broker還維護(hù)了一個(gè)索引文件(index file)記錄了msg key的反向索引關(guān)系,用于從key查找所有關(guān)聯(lián)的msgs。對于消費(fèi)端,broker會(huì)為每個(gè)topic下的子隊(duì)列創(chuàng)建一個(gè)邏輯消費(fèi)隊(duì)列(ConsumeQueue),ConsumeQueue中存儲(chǔ)的元素具有固定的20字節(jié)的長度,是一個(gè)指向commitlog中消息實(shí)體的指針。每個(gè)consumer的消費(fèi)進(jìn)度offset本質(zhì)上就是ConsumeQueue中元素的index,能夠通過commitlog offset獲得具體的消息體。
broker在接收到producer發(fā)送的消息時(shí),首先會(huì)把消息添加到commitlog文件的末尾,通過同步或者異步的方式刷盤。后續(xù)會(huì)有一個(gè)ReputMessageService的線程異步構(gòu)建ConsumeQueue以及IndexFile。核心的存儲(chǔ)文件如下圖:

broker的消息存儲(chǔ)架構(gòu)按依賴關(guān)系可以劃分為以下層次:

其中,MappedFileQueue/MappedFile封裝了底層的文件讀寫接口。RocketMQ使用JDK NIO中的MappedByteBuffer/FileChannel來使用操作系統(tǒng)的文件映射服務(wù),將一個(gè)大文件直接映射到一個(gè)內(nèi)存地址空間中。通過內(nèi)存的讀寫實(shí)現(xiàn)了文件的讀寫操作,避免了數(shù)據(jù)從內(nèi)核態(tài)向用戶態(tài)的拷貝。MappedFile代表的就是一個(gè)被切分成固定大小的日志文件(commitlog默認(rèn)切分大小為1G,文件名為該分片首字節(jié)在整個(gè)commitlog中的偏移)。多個(gè)MappedFile組成一個(gè)MappedFileQueue,形成一個(gè)完整的日志文件的視圖。
消息存儲(chǔ)核心實(shí)現(xiàn)類如下圖:

DefaultMessageStore是整個(gè)存儲(chǔ)子系統(tǒng)的入口,提供了消息寫入/讀取/查詢的方法,并通過后臺(tái)線程異步構(gòu)建ConsumeQueue和IndexFile兩個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
以上是“RocketMQ中broker消息存儲(chǔ)架構(gòu)是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站欄目:RocketMQ中broker消息存儲(chǔ)架構(gòu)是怎么樣的
本文URL:http://chinadenli.net/article46/jpsjeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、定制網(wǎng)站、ChatGPT、定制開發(fā)、全網(wǎng)營銷推廣、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)