【圖文詳細 】Kafka訊息佇列——Kafka的核心元件
4.1、kafka的核心元件概述
Kafka 是 LinkedIn 用於日誌處理的分散式訊息佇列,同時支援離線和線上日誌處理。
Kafka 對訊息儲存時根據 Topic 進行歸類:
傳送訊息者就是 Producer,訊息的釋出描述為 Producer
訊息接受者就是 Consumer,訊息的訂閱描述為 Consumer 每個
Kafka 例項稱為 Broker,將中間的儲存陣列稱作 Broker(代理)
然後三者都通過 Zookeeper 進行協調。
Kafka 的大致工作模式:
4.2、Kafka 拓撲結構
4.3、Kafka 的核心概念詳解
Producer : 生產 message 傳送到 topic
Consumer : 訂閱 topic 消費 message,consumer 作為一個執行緒來消費
Consumer Group:一個 Consumer Group 包含多個 consumer,這個是預先在配置檔案中配置好的
Broker:Kafka 節點,一個 Kafka 節點就是一個 broker,多個 broker 可以組成一個 Kafka 叢集。
Topic:一類訊息,訊息存放的目錄即主題,例如 page view 日誌、click 日誌等都可以以 topic 的形式存在,Kafka 叢集能夠同時負責多個 topic 的分發。
Partition:topic 物理上的分組,一個 topic 可以分為多個 partition,每個 partition 是一個有 序的佇列
Segment:partition 物理上由多個 segment 組成,每個 Segment 存著 message 資訊
4.3.1、生產者:Producer
4.3.2、Kafka 叢集的儲存代理:Broker
4.3.3、消費者組:Consumer Group
4.3.4、消費者:Consumer
每個 Consumer 屬於一個 Consumer Group
在 kafka 中:
1、 一個 Partition 的訊息只會被 group 中的一個 Consumer 消費
2、 可以認為一個 group 就是一個“訂閱者”
3、 一個 Topic 中的每個 Partition 只會被一個“訂閱者”中的一個 Consumer 消費
4.3.5、服務協調元件:Zookeeper
4.3.6、Kafka 核心:Topic 和日誌
4..3.7、訊息分割槽:Partition
4..3.8、日誌檔案:Segment 詳解
1、在 Kafka 檔案儲存中,同一個 topic 下有多個不同 partition,每個 partition 為一個目錄, partiton 命名規則為 topic 名稱+有序序號,第一個 partiton 序號從 0 開始,序號最大值為 partitions 數量減 1。
2、每個 partion(目錄)相當於一個巨型檔案被平均分配到多個大小相等 segment(段)資料檔案 中。但每個段 segment file 訊息數量不一定相等,這種特性方便 old segment file 快速被刪除。 預設保留 7 天的資料。
3、每個 partiton 只需要支援順序讀寫就行了,segment 檔案生命週期由服務端配置引數決 定。(什麼時候建立,什麼時候刪除,預設是 168 小時,也就是 7 天)
4、Segment File 組成:由 2 大部分組成,分別為 index file 和 data file,此 2 個檔案一一對應, 成對出現,字尾".index"和".log"分別表示為 segment 索引檔案、資料檔案。
5、Segment 檔案命名規則:partion 全域性的第一個 segment 從 0 開始,後續每個 segment 文 件名為上一個 segment 檔案最後一條訊息的 offset 值。數值最大為 64 位 long 大小,19 位數字字元長度,沒有數字用 0 填充。
6、索引檔案儲存大量元資料,資料檔案儲存大量訊息,索引檔案中元資料指向對應資料文 件中 message 的物理偏移地址。
3,497:當前 log 檔案中的第幾條資訊,存放在磁碟上的那個地方
上述圖中索引檔案儲存大量元資料,資料檔案儲存大量訊息,索引檔案中元資料指向對應數 據檔案中 message 的物理偏移地址。 其中以索引檔案中元資料3,497為例,依次在資料檔案中表示第3個message(在全域性partiton 表示第 368772 個 message)、以及該訊息的物理偏移地址為 497。
7、segment data file 由許多 message 組成,物理結構如下
8、查詢 offset 讀取 offset=368776 的 message,需要通過下面 2 個步驟查詢
第一步: 00000000000000000000.index 表示最開始的檔案,起始偏移量(offset)為 0 00000000000000368769.index 的訊息量起始偏移量為 368770 = 368769 + 1 00000000000000737337.index 的起始偏移量為 737338=737337 + 1 其他後續檔案依次類推。 以起始偏移量命名並排序這些檔案,只要根據 offset **二分查詢**檔案列表,就可以快速定 位到具體檔案。當 offset=368776 時定位到 00000000000000368769.index 和對應 log 檔案。
第二步: 當 offset=368776 時,依次定位到 00000000000000368769.index 的元資料物理位置和 00000000000000368769.log 的物理偏移地址 然後再通過 00000000000000368769.log 順序查詢直到 offset=368776 為止。