有關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的特點
分佈式
- 多分區
- 多副本
- 多訂閱者
- 基於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. 操作系統將數據從內核拷貝到網卡緩衝區,以便將數據經網絡發出
零拷貝指的是內核空間和用戶空間之間的交互拷貝次數為零