有關Kafka的那些事

  • 2020 年 9 月 25 日
  • 筆記

Kafka基本概念

  • Producer: 消息和數據的生產者,向kafka的一個topic發佈消息的進程、代碼、服務。
  • Consumer:消息和數據的消費者,訂閱數據並且處理器發佈的消息的進程、代碼、服務。
  • Consumer Group:邏輯概念,對於同一個topic,會廣播給不同的group,一個group中,只有一個consumer可以消費該消息。
  • Broker:物理概念,kafka集群中每個kafka節點
  • topic:邏輯概念,kafka消息的類別,對數據進行區分,隔離
  • Partition:分區,物理概念,kafka下數據存儲的基本單元,一個topic數據,會被分散存儲到多個Partition,每一個Partition是有序的。
    1. 每一個Topic被切分為多個Partitions
    2. 消費者數目小於或等於Partition的數目
    3. Broke Group中的每個Broke保存Topic的一個或多個Partitions
    4. Consumer Group中有且僅有一個Consumer讀取Topic的一個或多個Partitions,並且是唯一的Consumer。
  • Replication:副本,同一個Partition可能會有多個Replica,多個Replica之間數據是一樣的。
    1. 當集群中有Broker掛掉的情況,系統可以主動使Replicas提供服務。
    2. 系統默認設置每一個Topic的Replication係數為1,可以在創建Topic時單獨設置。
    3. Replication的基本單位是Topic的Partition。
    4. 所有的讀和寫都是Leader進,Followers只是作為備份。
    5. Follower必須能夠及時複製Leader的數據。
    6. 增加容錯性和可拓展性。
  • Replication Leader:一個Partition的多個Replica上,需要一個Leader負責該Partition上與Producer和Consumer交互,一個Partition有且只有一個Leader。
  • RepliceManager:負責管理當前broker的所有分區和副本的信息,處理kafkaController發起的一些請求,副本狀態的切換、添加/讀取消息等

kafka基本結構

kafka消息結構:

kafka的特點

分佈式

  1. 多分區
  2. 多副本
  3. 多訂閱者
  4. 基於ZooKeeper調度

高性能

  1. 高吞吐量
  2. 低延時
  3. 高並發
  4. 時間複雜度為O(1)

持久性和拓展性

  1. 數據可持久化
  2. 容錯性
  3. 支持在線水平拓展
  4. 消息自動平衡

kafka應用場景

  1. 消息隊列
    穩定性,高吞吐性,消息可被重複消費、低延遲性
  2. 行為跟蹤
  3. 元數據監控
  4. 日誌收集
  5. 流處理
  6. 事件源
  7. 持久性日誌(commit log)

kafka高級特性

kafka消息事務

  1. 為什麼要支持事務?
  • 滿足”讀取-處理-寫入”模式
  • 流處理需求的不斷增強
  1. 數據傳輸的事務定義
  • 最多一次:消息不會別重複發送,最多被傳輸一次,但也有可能一次不傳輸
  • 最少一次:消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸
  • 精確的一次(Exactly once):不會漏傳輸也不會重複傳輸,每個消息都傳輸且僅僅傳輸一次,這是大家所期望的
  1. 事務保證
  • 內部重試問題:Producer冪等處理
  • 多分區原子寫入
  • 避免殭屍實例

零拷貝

  • 網絡傳輸持久性日誌塊
  • Java Nio channel.transforTo()方法
  • Linux sendfile系統調用

文件傳輸到網絡的公共數據路徑
1. 操作系統將數據從磁盤讀入到內核空間的頁緩存
2. 應用程序將數據從內核空間讀入到用戶空間緩存中
3. 應用程序將數據寫回到內核空間到socket緩存中
4. 操作系統將數據從socket緩存區複製到網卡緩存區,以便將數據經網絡發出

零拷貝過程:
1. 操作系統將數據從磁盤讀入到內核空間的頁緩存
2. 將數據的位置和長度等信息的描述符增加至內核空間(socket緩衝區)
3. 操作系統將數據從內核拷貝到網卡緩衝區,以便將數據經網絡發出
零拷貝指的是內核空間和用戶空間之間的交互拷貝次數為零

參考