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的特點
分散式
- 多分割槽
- 多副本
- 多訂閱者
- 基於ZooKeeper排程
高效能
- 高吞吐量
- 低延時
- 高併發
- 時間複雜度為O(1)
永續性和擴充性
- 資料可持久化
- 容錯性
- 支援線上水平擴充
- 訊息自動平衡
kafka應用場景
- 訊息佇列
穩定性,高吞吐性,訊息可被重複消費、低延遲性 - 行為跟蹤
- 後設資料監控
- 日誌收集
- 流處理
- 事件源
- 永續性日誌(commit log)
kafka高階特性
kafka訊息事務
- 為什麼要支援事務?
- 滿足"讀取-處理-寫入"模式
- 流處理需求的不斷增強
- 資料傳輸的事務定義
- 最多一次:訊息不會別重複傳送,最多被傳輸一次,但也有可能一次不傳輸
- 最少一次:訊息不會被漏傳送,最少被傳輸一次,但也有可能被重複傳輸
- 精確的一次(Exactly once):不會漏傳輸也不會重複傳輸,每個訊息都傳輸且僅僅傳輸一次,這是大家所期望的
- 事務保證
- 內部重試問題:Producer冪等處理
- 多分割槽原子寫入
- 避免殭屍例項
零拷貝
- 網路傳輸永續性日誌塊
- Java Nio channel.transforTo()方法
- Linux sendfile系統呼叫
檔案傳輸到網路的公共資料路徑
1. 作業系統將資料從磁碟讀入到核心空間的頁快取
2. 應用程式將資料從核心空間讀入到使用者空間快取中
3. 應用程式將資料寫回到核心空間到socket快取中
4. 作業系統將資料從socket快取區複製到網路卡快取區,以便將資料經網路發出
零拷貝過程:
1. 作業系統將資料從磁碟讀入到核心空間的頁快取
2. 將資料的位置和長度等資訊的描述符增加至核心空間(socket緩衝區)
3. 作業系統將資料從核心拷貝到網路卡緩衝區,以便將資料經網路發出
零拷貝指的是核心空間和使用者空間之間的互動拷貝次數為零