部落格371 kafka的儲存結構

2021-10-24 08:34:45 字數 2262 閱讀 4049

內容:記錄kafka的儲存結構

資料分片:

kafka 使用日誌檔案的方式來儲存生產者和傳送者的訊息,每條訊息都有乙個 offset 值來表示它在分割槽

中的偏移量。kafka 中儲存的一般都是海量的訊息資料,為了避免日誌檔案過大,乙個分片 並不是直接對

應在乙個磁碟上的日誌檔案,而是對應磁碟上的乙個目錄,這個目錄的命名規則是:

_多個分割槽在集群中多個broker上的分配方法

1.將所有 n broker 和待分配的 i 個 partition 排序

2.將第 i 個 partition 分配到第(i mod n)個 broker 上

也就是下圖的乙個partion對應乙個儲存目錄

log分段:

每個分片目錄中,kafka 通過分段的方式將資料分為多個 logsegment,乙個 logsegment對應磁碟上的

乙個日誌檔案(00000000000000000000.log)和乙個索引檔案(如上:00000000000000000000.index)

其中日誌檔案是用來記錄訊息的。索引檔案是用來儲存訊息的索引。

segment 的 index file 和 data file 2 個檔案一一對應,成對出現,字尾".index"和「.log」分別

表示為 segment 索引檔案、資料檔案

最後一條訊息的offset值進行遞增。數值最大為 64 位long 大小,20 位數字字元長度,沒有數字用0填充

第乙個 log 檔案的最後乙個 offset 為:

5377

,所以下乙個segment 的檔案命名為:

0000000000000005377.log。對應的 index 為 00000000000000005377.index

kafka 這種分片和分段策略,避免了資料量過大時,資料檔案檔案無限擴張帶來的隱患,更有助於訊息檔案的

維護以及被消費的訊息的清理。在讀取乙個topic的時候,也有利於順序讀取。如果所有日誌不分類,都放在

一起,那麼要搜尋某段日誌,就只能是隨機io。

日誌檔案和索引檔案的內容:

作用解析:

index 檔案中儲存了索引以及物理偏移量。 log 檔案儲存了訊息的內容。

索引檔案中儲存了部分offset和偏移量position的對應關係。

比如:index檔案中 [

4053

,80899

],表示在 log 檔案中,對應的是第 4053 條記錄,

物理偏移量(position)為 80899.

在 partition 中通過 offset,二分 查詢 message過程:

根據 offset 的值,查詢 segment 段中的 index 索引檔案。由於索引檔案命名是以上乙個檔案

的最後乙個offset 進行命名的,所以,使用二分查詢演算法能夠根據offset 快速定位到指定的索引

檔案找到索引檔案後,根據 offset 進行定位,找到索引檔案中的匹配範圍的偏移量position。

(kafka 採用稀疏索引的方式來提高查詢效能)

得到 position 以後,再到對應的 log 檔案中,從 position處開始查詢 offset 對應的訊息,

將每條訊息的 offset 與目標 offset 進行比較,直到找到訊息。

比如說,我們要查詢 offset=

2490 這條訊息,那麼先找到00000000000000000000.index,

然後找到[

2487

,49111

]這個索引,再到 log 檔案中,根據 49111 這個 position 開始查詢,

比較每條訊息的 offset 是否大於等於 2490。最後查詢到對應的訊息以後返回

Kafka的儲存模型

有部分內容 這篇講的很詳細 易懂 kafka乙個topic可以有多個partition,多個執行緒,每個執行緒負責乙個partition進行讀寫 每個paratition可以有多個logsegment,每個logsegment檔案包括乙個日誌資料檔案和兩個索引檔案 偏移量索引檔案和訊息時間戳索引檔案...

Kafka檔案的儲存機制

同乙個topic下有多個不同的partition,每個partition為乙個目錄,partition命名的規則是topic的名稱加上乙個序號,序號從0開始。每乙個partition目錄下的檔案被平均切割成大小相等 預設乙個檔案是500兆,可以手動去設定 的資料檔案,每乙個資料檔案都被稱為乙個段 s...

Kafka檔案的儲存機制

同乙個topic下有多個不同的partition,每個partition為乙個目錄,partition命名的規則是topic的名稱加上乙個序號,序號從0開始。每乙個partition目錄下的檔案被平均切割成大小相等 預設乙個檔案是500兆,可以手動去設定 的資料檔案,每乙個資料檔案都被稱為乙個段 s...