Kafka工作流程及文件存儲機制

Kafka工作流程

在這裏插入圖片描述

在這裏插入圖片描述

  • Kafka 中消息是以 topic 進行分類的,生產者生產消息,消費者消費消息,都是面向 topic 的。
  • topic 是邏輯上的概念,而 partition 是物理上的概念。
  • 每個partition都有對應的.log文件,該 log 文件中存儲的就是 producer 生產的數據。
  • producer生產的數據會發送給topic的每個partition,並追加到partition的.log文件中。
  • 消費者組中的每個消費者,都會實時記錄自己消費到了哪個offset,以便出錯恢復時,從上次的位置繼續消費。
  • producer發送數據和消費者消費數據的對象都是partition中的leader,其他follower會實時從leader中同步數據,和leader中的數據保持一致。
  • 每個partition中的數據是有序的。

Kafka文件存儲機制

在這裏插入圖片描述

  • 每個topic可以分爲多個partition。
  • Kafka 採取了分片和索引機制,將每個 partition 分爲多個 segment。
  • 每個partition可以分爲多個segment。
  • 每個segment大小是相同的,且都對應若一個.log和.index文件。
  • .log和.index文件成對存在,.log文件記錄的是producer生產的數據,.index文件記錄的是.log文件中每條數據的物理偏移量。
  • 每個partition的數據都位於同一個目錄下,並以"topic名稱_partition號"的格式命名。
  • partition數據的全局存放路徑可以在Kafka下bin/config/server.properties中配置,配置參數爲:log.dirs=xxx/xxx/xxx

index文件和log文件

在這裏插入圖片描述
在這裏插入圖片描述

  • index文件和log文件都以該segment的第一個消息的offset命名。數值最大爲64位long大小,19位數字字符長度,沒有數字用0填充。
  • .index文件存儲大量的索引信息,.log文件存儲大量的數據,索引文件中的元數據指向對應數據文件中 message的物理偏移地址。
  • 示例:查找offset爲368722的數據
    1. 首先根據偏移量通過二分查找法快速定位到368722對應的.index文件和.log文件分別爲:00000000000000368739.index和00000000000000368739.log;
    2. .index文件中每條索引數據的大小也是固定的,因此可以通過offset快速定位到所要查找索引的位置爲:3,497。3表示:該索引對應的消息是該segment中的第三條數據,497表示:該索引對應的數據在00000000000000368739.log中的物理偏移量是497;
    3. 查找到了368722在00000000000000368739.log中的物理偏移量,也就找到了索要查找到的數據。

message物理結構

在這裏插入圖片描述

參數說明
關鍵字 解釋
8 byte offset 在parition(分區)內的每條消息都有一個有序的id號,這個id號被稱爲偏移(offset),它可以唯一確定每條消息在parition(分區)內的位置。即offset表示partiion的第多少message
4 byte message size message大小
4 byte CRC32 用crc32校驗message
1 byte “magic” 表示本次發佈Kafka服務程序協議版本號
1 byte “attributes” 表示爲獨立版本、或標識壓縮類型、或編碼類型
4 byte key length 表示key的長度,當key爲-1時,K byte key字段不填
K byte key 可選
value bytes payload 表示實際消息數據

文章部分內容參考自:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html

發佈了117 篇原創文章 · 獲贊 192 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章