這篇文章主要介紹“kafka文件的存儲機制原理”,在日常操作中,相信很多人在kafka文件的存儲機制原理問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對大家解答”kafka文件的存儲機制原理”的疑惑有所幫助!接下來(lái),請跟著(zhù)小編一起來(lái)學(xué)習吧!
每一個(gè)topic,分為多個(gè)partition,每一個(gè)partition在文件系統當中是一個(gè)文件夾。
而每一個(gè)partition當中,又分成了多個(gè)segment,每個(gè)segment,包括了2個(gè)文件,.index文件和.log文件,分別是消息的索引信息和消息內容。而文件的名字形如下面的格式
00000000000000000000.log
00000000000000000000.index
0000000000000999.log
0000000000000999.index
文件名的就是消息在本分區當中的序號,以上面的文件為例,第一個(gè)segment當中存儲了0-999的消息,而第二個(gè)segment從1000開(kāi)始。
需要注意的是segment的劃分規則,目前據我的研究,是綜合了2方面的因素,一個(gè)是設定的segment的大小,滿(mǎn)了自然會(huì )再來(lái)一個(gè)segment;第二個(gè)因素是時(shí)間的因素,比如某個(gè)topic長(cháng)時(shí)間沒(méi)有消息寫(xiě)入,那么在有新消息進(jìn)來(lái)的時(shí)候,很可能會(huì )重新建一個(gè)segment,這樣做的目的是為了方便在消息失效的時(shí)候,針對整個(gè)segment進(jìn)行刪除。
index文件當中,包含了2部分內容,分別是消息的在本segment當中的編號和物理offset。這里需要注意的是,在index文件當中,并不是存儲了每一條消息的的索引信息,而是采用了 稀疏索引的策略,也就是隔幾個(gè)存一個(gè)索引。
在查找一條消息的時(shí)候,首先是根據segment的名字和輸入的消息編號,查找所在的segment,之后在根據index文件找到消息的具體位置。
寫(xiě)過(guò)程:
消息從java堆轉入page cache(即物理內存)
由異步線(xiàn)程刷盤(pán),消息從page cache刷入磁盤(pán)
讀過(guò)程:
消息直接從page cache轉入socket發(fā)送出去
當從page cache沒(méi)有找到相應數據時(shí),此時(shí)會(huì )產(chǎn)生磁盤(pán)IO,從磁 盤(pán)Load消息到page cache,然后直接從socket發(fā)出去
存儲設計的優(yōu)點(diǎn):
Kafka把topic中一個(gè)parition大文件分成多個(gè)小文件段,通過(guò)多個(gè)小文件段,就容易定期清除或刪除已經(jīng)消費完文件,減少磁盤(pán)占用。
通過(guò)索引信息可以快速定位message
通過(guò)index元數據全部映射到memory,可以避免segment file的IO磁盤(pán)操作
通過(guò)索引文件稀疏存儲,可以大幅降低index文件元數據占用空間大小
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站