日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

rocketMq - commitLog

發(fā)布時(shí)間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rocketMq - commitLog 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

? ? 這篇博文主要是想講清楚rocketMq中commitLog的存儲(chǔ)格式和存儲(chǔ)過(guò)程的,在整理文章的過(guò)程中發(fā)現(xiàn)有篇來(lái)自CSDN的文章的有一張圖片畫(huà)的非常完整,就套用過(guò)來(lái)了,不過(guò)在博文的末尾把參考文章的地址列出來(lái)了。


commitLog存儲(chǔ)數(shù)據(jù)格式

? ? commtLog的存儲(chǔ)其實(shí)是分多層的,commitLog -> mappedFileQueue -> mappedFile,其中真正存儲(chǔ)數(shù)據(jù)的是mappedFile。

? ? commitLog在mappedFile當(dāng)中存儲(chǔ)消息的格式是【msg + msg + msg + ......+msg+blank】。也就是當(dāng)最后的位置放不下消息的時(shí)候就填充空白。

rocketMq數(shù)據(jù)存儲(chǔ)圖


commitLog數(shù)據(jù)存儲(chǔ)過(guò)程

????commitLog內(nèi)部的數(shù)據(jù)結(jié)構(gòu),核心的在于MappedFileQueue這個(gè)對(duì)象,以及每個(gè)MappedFile的大小(1G=20124*1024*1024)。

? ? commitLog保存消息的過(guò)程如下

? ? ? ? 1、在mappedFileQueue里面選擇最近的mappedFile文件,如果沒(méi)有mappedFile文件或者mappedFile數(shù)據(jù)已經(jīng)滿的情況下就新建一個(gè)mappedFile文件。

? ? ? ? 2、選擇mappedFile文件之后,開(kāi)始計(jì)算消息體大小并保存至mappedFile文件當(dāng)中,在整個(gè)保存過(guò)程中先用臨時(shí)的byteBuffer(msgStoreItemMemory)保存,如果mappedFile文件能夠保存下最新的消息體就保存消息至mappedFile文件,否則就保存一個(gè)結(jié)束符。

commitLog的數(shù)據(jù)結(jié)構(gòu) mappedFile的大小 獲取MappedFile對(duì)象


獲取writeBuffer并開(kāi)始寫(xiě)入


前置計(jì)算消息大小等操作 存在消息體的過(guò)程


mappedFile文件生成邏輯

? ? mappedFile的文件生成其實(shí)有一定的規(guī)則,首先mappedFile文件的命名是以1024*1024*1024=1073741824進(jìn)行遞增,也就是說(shuō)第一個(gè)文件名字為000000001073741824,第二個(gè)名字是以00000000002147483648進(jìn)行命令,以次遞增。體現(xiàn)在代碼中就是以上一個(gè)文件的便宜量加上1073741824即可。

? ? 在創(chuàng)建過(guò)程如果文件不存在我們就創(chuàng)建新文件,這里的創(chuàng)建也分兩種類(lèi)型,一種就是同時(shí)創(chuàng)建兩個(gè)mappedFile文件,這個(gè)創(chuàng)建過(guò)程是異步的,在allocateMappedFileService內(nèi)部其實(shí)有個(gè)線程在不停run執(zhí)行文件創(chuàng)建過(guò)程;一種是同步創(chuàng)建文件過(guò)程。

? ? 在內(nèi)部還涉及一些預(yù)熱之類(lèi)的邏輯,暫時(shí)沒(méi)仔細(xì)看。

參考

????RocketMQ消息存儲(chǔ)流程圖及數(shù)據(jù)結(jié)構(gòu)圖

總結(jié)

以上是生活随笔為你收集整理的rocketMq - commitLog的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。