1. 程式人生 > 其它 >kafka檔案儲存形式

kafka檔案儲存形式

Kafka 中訊息是以 topic 進行分類的,生產者生產訊息,消費者消費訊息,都是面向topic的。topic儲存結構見下圖:

由於生產者生產的訊息會不斷追加到 log 檔案末尾,為防止 log 檔案過大導致資料定位效率低下,Kafka 採取了分片和索引機制,將每個partition分為多個segment。每個 segment對應兩個檔案——“.index”檔案和“.log”檔案。
partition資料夾命名規則
topic 名稱+分割槽序號,舉例有一個topic名稱文“kafka”,這個topic有三個分割槽,則每個資料夾命名如下:

kafka-0
kafka-1
kafka-2

index和log檔案的命名規則


1)partition資料夾中的第一個segment從0開始,以後每個segement檔案以上一個segment檔案的最後一條訊息的offset+1命名(當前日誌中的第一條訊息的offset值命名)。
2)數值最大為64位long大小。19位數字字元長度,沒有數字用0填充。
舉例,有以下三對檔案:

0000000000000000000.log
0000000000000000000.index
0000000000000002584.log
0000000000000002584.index
0000000000000006857.log
0000000000000006857.index

以第二個檔案為例看下對應的資料結構:

稀疏索引需要注意下。
訊息查詢過程:
找message-2589,即offset為2589:
1)先定位segment檔案,在0000000000000002584中。
2)計算查詢的offset在日誌檔案的相對偏移量


offset - 檔名的數量 = 2589 - 2584 = 5;
在index檔案查詢第一個引數的值,若找到,則獲取到偏移量,通過偏移量到log檔案去找對應偏移量的資料即可;
本例中沒有找到,則找到當前索引中偏移量的上線最接近的值,即3,偏移量文246;然後到log檔案中從偏移量為246資料開始向下尋找。