《Apache Kafka源碼剖析》——簡介

關鍵特性

  • 近乎實時性的消息處理能力,順序讀寫磁盤
  • 批量讀寫消息,批量壓縮消息,提供網絡利用率
  • 消息分區,每個分區消息順序傳輸,分區之間併發操作
  • 支持在線增加分區,水平擴展 分區副本,一個Leader副本負責讀寫,其他副本負責同步,提高容災能力

應用場景

  • 消息中間件,實現消息隊列和消息的發佈/訂閱
  • 數據總線
  • 日誌收集中心
  • 基於Kafka設計數據庫主從同步的工具

Other

解耦:隊列
數據持久化:磁盤

擴展與容災:
服務端:每個Topic分爲多個Partition(分區,水平擴展),每個Partition有多個Replica(副本,一主多從,容災)
Consumer:Consumer Group

順序保證
緩衝&峯值處理能力
異步通信

核心概念

**消息:**主要由key和value組成,key用於路由分區

**Topic:**存儲消息的邏輯概念,即一個消息集合。每個Topic可以有多個生產者push消息,也可以有多個消費者pull消息
每個Topic可以分爲多個分區。每個消息被添加到分區時,都會被分配一個offset,用於保證消息在分區內的順序。

**Log:**分區在邏輯上對應一個Log。Log可以對應到磁盤上的一個文件夾。
Log由多個Segment組成,每個Segment對應一個日誌文件和索引文件。
因爲Kafka採用順序I/O,所以只向最新的Segment追加數據。
索引文件採用稀疏索引,運行時映射到內存。

保留策略:
1.根據消息保留的時間刪除
2.根據Topic存儲數據的大小,刪除最舊的消息。
Kafka啓動一個後臺線程定期檢查。

日誌壓縮:
key和value會不斷變化,消費者只關心key對應的最新的value值。
Kafka啓動一個後臺線程定期將相同key的消息進行合併,只保留最新的value值。

Broker:
一個單獨的Kafka Server. Broker的主要工作就是接收生產者發過來的消息,分配offset,保存到磁盤。接收並響應消費者、其他Broker的請求。

副本:
用於冗餘備份,每個Partition可以有多個副本。所有的讀寫請求都由選舉出的Leader副本處理,Follower副本同步更新到自己的Log.

ISR集合:
1)副本所在節點維持與zk的連接
2)副本最新消息的offset與Leader副本的最新消息的offset的差值不能超過閾值
Leader副本維護這個集合。

HW&LEO:
HW標記了一個特殊的offset.消費者只能拉取到HW之前的消息。
當ISR集合中全部的Follower副本都拉取了HW指定消息進行同步後,Leader副本會遞增HW的值。
LEO指向追加到當前副本的最新消息的offset.

Cluster&Controller:
多個Broker可以做成一個Cluster(集羣)對外提供服務,每個Cluster當中會選舉出一個Broker來擔任Controller. Controller是集羣的指揮中心。
Controller負責管理分區的狀態、管理每個分區的副本狀態、監聽zk中數據的變化等工作。

生產者

消費者:
Consumer自己維護消費到哪個offset

Consumer Group:
logical subscriber
Consumer Goup保證其訂閱的Topic的每個分區只被分配給此Consumer Goup的一個消費者處理。
廣播:每個Consumer 在一個獨立的Consumer Goup
獨佔:每個Consumer在同一個Consumer Goup
水平擴展和故障轉移

https://juejin.im/post/5c94f4ed6fb9a070e4623687#heading-7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章