kafka 日誌格式

2021-10-10 07:23:09 字數 2078 閱讀 8135

kafka的topic-partition資料夾下有多個檔案包括 .log .idex .timeindex 這三個核心檔案 還包括 .deleted .cleaned .swap 等臨時檔案 還可能有 .snapshot .txnindex leader-epoch-checkpoint 等檔案

.log檔案是kafka的資料檔案,主要研究一下 .log檔案

kafka的日誌檔案經過多次公升級,已達到更大的壓縮率和實現更多的功能,記錄更多的資訊

日誌的命令是第一條資料的offset加檔案字尾 例如 00000000000000000098.log,第一條資料的偏移量是98,名稱一共20位數字,不足用0補起

一.v0版本的日誌檔案

kafka 0.10.0之前都採用v0格式

如圖所示,offset和message size是訊息的頭部(log_overhead),record是訊息實體,offset佔8b,message size佔4b,固定為12b

record的格式如下圖:

crc32校驗magic至value的值

magic此版本為0

二.v1版本訊息

kafka從0.10.0到0.11.0使用v1版本的record,比v0多乙個時間戳字段timestamp(8b),同時attributes欄位的第四位表示時間戳的型別,其他4位未使用

三.v2版本的訊息

kafka從0.11.0開始公升級訊息格式位v2

v2格式的訊息較之前有很大變化,參考protocol buffer引入了變長整型varints和zigzag編碼,具體設計較多演算法,不展開

v2的訊息比之前複雜很多,需要分3部分解釋,關係是乙個recordbatch包含多個record,其中record包含多個header,recordbatch對應了傳送訊息的producerbatch

1.header部分,我們知道kafka 傳送訊息可以帶header作為附屬資訊,header的結構如下:

varint表示變長型別,即varints

2.record部分如下圖,去掉了crc欄位,增加了length(訊息總長度),timestap delta(時間戳增量),offset delta(位移增量),headers(上面講的header結構)

其中attributes已經棄用,作為保留字段

timestamp delta 和offset delta都是相對於recordbatch起始位置的增量,使用增量資料可以節省很多空間

3.recordbatch部分,如下圖

針對特殊字段說明如下:

magic=2

producer id:pid,producer epoch,first sequence,用來支援冪等和事務

下面放一張完整的圖

四.訊息日誌dump

了解了訊息日誌的格式,介紹一下解析訊息日誌的方法:

kafka-dump-log.sh

例如:

進一步解析訊息實體

Kafka日誌清理

kafka日誌清理目前主要有兩種策略 日誌刪除 日誌壓縮 日誌壓縮就是根據key來保留最後一條訊息。kafka提供log.cleanup.policy引數進行相應配置,預設值 delete,還可以選擇compact。日誌刪除 配置預設值 說明log.retention.check.interval....

Kafka日誌索引

kafka中的索引檔案以稀疏索引 sparse index 的方式構造訊息的索引,並不保證每個訊息在索引中都有對應的索引項。每當寫入一定量 由broker端引數log.index.interval.bytes指定,預設值4k 偏移量索引檔案 時間戳索引檔案分別增加乙個偏移量索引項和時間戳索引項,lo...

Kafka訊息格式

從0.8.x版本開始到現在的2.x版本,kafka的訊息格式也經歷了 3 個版本 v0 版本 v1 版本和 v2 版本 kafka 從 0.8.x 版本開始到 0.10.x 版本之前的訊息格式通常稱為 v0 版本。下圖中左邊的 record 部分就是 v0 版本的訊息格式,每個 record v0 ...