kafka 系列 -- 7.一、日誌存儲

一、日誌文件佈局

image.png
image.png
image.png

__consumer_offset 存儲着消費者提交的消費位移算法

二、日誌存儲格式

V0

image.png

消息格式
  • offset:

每一條消息都有一個 offset 用來標誌它在分區中的偏移量,offset 是邏輯值,而非實際物理偏移量佈局

  • message_size:

表示消息的大小性能

  • crc32(4B):

crc32 校驗值。校驗範圍爲 magic 至 value 之間spa

  • magic(1B):

消息格式版本號,V0 固定爲 03d

  • attributes(1B):

消息的屬性。總共佔1個字節,低 3 位表示壓縮類型。
0:NONE、1:GZIP、2:SNAPPY;3:LZ4. 其他位保留日誌

  • key length(4B):

-1,表示沒有設置 keycode

  • key:

可選blog

  • value lengtj(4B):

消息體的長度,-1,表示爲空事務

  • value:

消息體kafka

V1

kafka0.10.0 版本至 0.11.0 版本以前所使用的消息格式版本爲 v1, 比 v0 多了一個 timestamp 字段
image.png

消息格式
  • magic(1B):

消息格式版本號,V0 固定爲 1

  • attributes(1B):

前三位一樣表示壓縮類型。
第4位:0-timestamp 類型爲 CreateTime, 1-timestap 類型爲 LogAppendTime
timestamp 類型由 broker 端參數 log.message.timestamp.type 配置,默認值爲 CreateTime

V2

kafka 版本從 0.11.0 以後都稱爲 v2.
image.png

  • length

消息總長度

  • attributes

棄用

  • timestamp delta

時間戳增量,保存與 RecordBatch 起始時間戳的差值

  • offset delta

位移增量,保存與 RecordBatch 起始位移的差值

  • headers

支持應用級別的擴展

  • first offset

當前 RecordBatch 的起始位移

  • length

計算從 partitionleader epoch 字段開始到末尾的長度

  • partitionleader epoch

分區 leader 的版本號或更新次數

  • magic

V2 固定爲 2

  • attributes

佔用 2 個字節;低三位表示壓縮格式,第4位表示時間戳類型,第5位表示 RecordBatch 是否處於事務中,0-非事務,1-事務。第6位表示是不是控制消息,0-非控制,1-控制,控制消息用來支持事務功能

  • last offset delta

RecordBatch 中最後一個 Recordoffsetfirst offset 的差值。最要被 broker 用於確保RecordBatchRecord 組裝的正確性

  • first timestamp

RecordBatch 第一條Record 時間戳

  • max timestamp

RecordBatch 中最大時間戳

  • producer id

PID,用於支持冪等和事務

  • producer epoch

用於支持冪等和事務

  • first sequence

用於支持冪等和事務

  • record count

RecordBatchRecord 個數

三、消息壓縮

broker 可經過 compression.type 配置壓縮方式,默認 producer,即保留生產者的壓縮方式

什麼時候壓縮

kafka 可能在 producer 端或者 broker 端中進行壓縮。

當消息在 broker 端從新壓縮時,會形成性能降低,所以須要儘可能避免。

如下會在 broker 端發生從新壓縮

  1. broker 端和producer 端不一樣的壓縮算法。
  2. broker 端發生消息格式轉換,即新版本消息向老版本消息轉化。

什麼時候解壓縮

kafka 將多條消息放一塊兒壓縮,生產者發送的是壓縮的數據,broker 存儲的也是壓縮的數據。消費者在拉取消息時,也是壓縮的數據,在處理前纔會解壓消息。

相關文章
相關標籤/搜索