有關Kafka的那些事

誰主沉浮oo7發表於2020-09-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. 作業系統將資料從核心拷貝到網路卡緩衝區,以便將資料經網路發出
零拷貝指的是核心空間和使用者空間之間的互動拷貝次數為零

參考

相關文章