深入理解Kafka與Pulsar:消息流平臺的實踐與剖析
內容描述
本書詳細介紹了Kafka與Pulsar的使用方式,並深入分析了它們的實現機制。通過閱讀本書,讀者可以快速入門使用Kafka與Pulsar,並深入理解它們的實現原理。 本書通過大量實踐示例介紹了Kafka與Pulsar的使用方式,包括管理腳本與客戶端(生產者、消費者)的使用方式、關鍵的配置項、ACK提交方式等基礎應用,以及安全機制、跨地域復制機制、連接器/流計算引擎、常用監控管理平臺等高級應用。這些內容可以幫助讀者深入掌握Kafka與Pulsar的使用方式,並完成日常管理工作。另外,本書深入分析了Kafka與Pulsar的實現原理,包括客戶端(生產者、消費者)的設計與實現、Broker網絡模型、主題(分區)分配與負載均衡機制,以及磁盤存儲與性能優化方案、數據同步機制、擴容與故障轉移機制。最後,本書介紹了Kafka與Pulsar的事務機制,並深入分析了Kafka事務的實現及Kafka最新的分佈式協作組件KRaft模塊。這部分內容可以幫助讀者輕松理解Kafka與Pulsar的架構設計與實現原理。
目錄大綱
第1部分 基礎應用
第1章 Kafka與Pulsar概述
1.1 簡介
1.2 特性
1.3 概念
1.3.1 Kafka基礎概念
1.3.2 Pulsar基礎概念
1.4 本章總結
第2章 Kafka的部署與調試
2.1 安裝Kafka集群
2.1.1 部署ZooKeeper集群
2.1.2 部署Kafka集群
2.2 調試Kafka
2.3 本章總結
第3章 Kafka的應用
3.1 腳本
3.1.1 主題管理
3.1.2 生產者與消費者
3.1.3 動態配置
3.2 客戶端
3.2.1 生產者
3.2.2 消費者
3.3 消息序列化
3.4 配額
3.5 本章總結
第4章 Pulsar的部署與調試
4.1 本地部署
4.2 集群部署
4.2.1 ZooKeeper集群部署
4.2.2 初始化集群元數據
4.2.3 部署BookKeeper集群
4.2.4 部署Pulsar Broker
4.3 調試Pulsar
4.3.1 調試Pulsar Broker源碼
4.3.2 調試BookKeeper
4.4 本章總結
第5章 Pulsar的應用
5.1 租戶
5.2 命名空間
5.2.1 消息保留和過期
5.2.2 持久化策略
5.2.3 消息投遞速率
5.3 主題
5.3.1 創建主題
5.3.2 發送、消費消息
5.3.3 管理主題
5.4 客戶端
5.4.1 生產者
5.4.2 消費者
5.5 Schema
5.5.1 Schema的類型與使用示例
5.5.2 Schema演化與兼容
5.5.3 管理Schema
5.6 資源隔離
5.6.1 Broker隔離
5.6.2 Bookie隔離
5.7 兼容Kafka客戶端
5.8 BookKeeper使用示例
5.9 本章總結
第2部分 客戶端與Broker計算層
第6章 Kafka和Pulsar的架構
6.1 ZooKeeper的作用
6.2 Kafka的架構設計
6.2.1 元數據管理
6.2.2 發布/訂閱模式
6.2.3 磁盤存儲的設計與優化
6.2.4 數據副本
6.2.5 系統伸縮
6.2.6 故障轉移
6.3 Pulsar的架構設計
6.3.1 Pulsar的計算層
6.3.2 Pulsar的存儲層
6.3.3 系統伸縮
6.3.4 故障轉移
6.4 源碼架構
6.4.1 Kafka
6.4.2 Pulsar
6.4.3 BookKeeper
6.5 本章總結
第7章 Kafka的主題
7.1 CreateTopics請求的處理流程
7.1.1 創建主題
7.1.2 分區副本分配規則
7.1.3 存儲主題元數據
7.2 KafkaController處理新主題
7.3 本章總結
第8章 Kafka的生產者與消息發布
8.1 生產者發送消息
8.1.1 消息發送流程
8.1.2 消息累積器與消息批次
8.1.3 Sender線程
8.1.4 TCP通信協議
8.1.5 元數據刷新機制
8.2 Broker接收消息
8.2.1 Broker處理消息流程
8.2.2 延遲操作與時間輪
8.3 本章總結
第9章 Kafka的消費者與消息訂閱
9.1 消費組協作機制
9.1.1 分區分配器
9.1.2 重平衡的設計
9.1.3 實戰:使用CooperativeStickyAssignor分區分配器
9.1.4 重平衡的實現
9.2 心跳與元數據更新
9.3 ACK管理
9.3.1 消費者初始化偏移量
9.3.2 ACK偏移量的提交與存儲
9.4 讀取消息
9.4.1 消費者發送Fetch請求
9.4.2 Broker處理Fetch請求
9.5 本章總結
第10章 Pulsar的主題
10.1 租戶與命名空間
10.2 主題
10.2.1 創建主題
10.2.2 初始化主題
10.2.3 綁定主題
10.3 Broker負載均衡
10.3.1 負載報告上傳
10.3.2 為bundle選擇Broker節點
10.4 bundle管理
10.4.1 選舉leader節點
10.4.2 bundle卸載機制
10.4.3 bundle切分機制
10.5 本章總結
第11章 Pulsar的生產者與消息發布
11.1 生產者發送消息
11.1.1 初始化生產者
11.1.2 生產者發送消息流程
11.2 Broker處理消息
11.2.1 寫入消息
11.2.2 切換Ledger
11.3 本章總結
第12章 Pulsar的消費者與消息訂閱
12.1 消費者訂閱消息
12.1.1 消費者的初始化
12.1.2 接收消息
12.1.3 確認超時與取消確認
12.2 Broker讀取與推送消息
12.2.1 處理Subscribe請求
12.2.2 推送消息
12.3 ACK機制
12.3.1 ACK機制的設計
12.3.2 ACK機制的實現
12.4 消息清除
12.4.1 歷史消息清除
12.4.2 清除backlog消息
12.4.3 清除過期數據
12.5 本章總結
第3部分 分佈式數據存儲
第13章 Kafka存儲機制與讀寫流程
13.1 數據存儲機制的設計
13.2 消息寫入流程
13.3 消息讀取流程
13.4 日誌管理
13.4.1 日誌加載
13.4.2 日誌刷盤
13.4.3 數據清理
13.4.4 數據去重
13.5 本章總結
第14章 Kafka主從同步
14.1 成為leader/follow副本
14.2 follow副本同步流程
14.2.1 同步流程與數據一致性
14.2.2 LeaderEpoch機制
14.2.3 follow副本拉取消息
14.3 leader副本更新
14.3.1 更新ISR集合
14.3.2 更新高水位
14.4 本章總結
第15章 Kafka分佈式協同
15.1 KafkaController選舉
15.1.1 KafkaController元數據
15.1.2 ControllerEpoch機制
15.1.3 選舉流程
15.2 ZooKeeper監控機制
15.3 故障轉移
15.3.1 分區、副本狀態機
15.3.2 分區狀態切換流程
15.3.3 副本狀態切換流程
15.4 實戰:Preferred Replica重平衡
15.5 實戰:增加分區數量
15.6 實戰:Kafka集群擴容
15.7 本章總結
第16章 BookKeeper客戶端
16.1 客戶端設計
16.2 客戶端寫入
16.2.1 Ledger創建流程
16.2.2 數據寫入流程
16.2.3 處理寫入結果
16.2.4 故障轉移
16.2.5 LAC上報
16.2.6 限制生產者數量
16.3 客戶端讀取
16.3.1 消費者讀取數據
16.3.2 客戶端Recover
16.4 本章總結
第17章 BookKeeper服務端
17.1 Bookie設計
17.2 Bookie寫入流程
17.2.1 Bookie初始化
17.2.2 Journal寫入流程
17.2.3 Ledger寫入流程
17.2.4 Ledger的數據存儲格式
17.3 Bookie讀取數據
17.4 Bookie數據清除
17.5 Bookie Recovery
17.5.1 Auditor
17.5.2 ReplicationWorker
17.6 本章總結
第4部分 事務與KRaft模塊
第18章 Kafka與Pulsar事務概述
18.1 為什麽需要事務
18.1.1 冪等發送
18.1.2 事務保證
18.2 Kafka事務應用示例
18.3 Pulsar事務應用示例
18.4 本章總結
第19章 Kafka事務的設計與實現
19.1 Kafka的事務設計
19.2 事務初始化流程
19.2.1 事務定義
19.2.2 生產者初始化事務
19.2.3 生產者啟動事務
19.3 事務消息發送與處理流程
19.3.1 事務分區發送與處理流程
19.3.2 生產者發送事務消息
19.3.3 Broker處理事務消息
19.3.4 ACK偏移量發送與處理流程
19.4 事務提交流程
19.4.1 生產者提交事務
19.4.2 協調者完成事務
19.5 本章總結
第20章 KRaft模塊概述
20.1 為什麽要移除ZooKeeper
20.2 部署與調試KRaft模塊
20.3 Raft算法
20.3.1 leader選舉
20.3.2 日誌復制
20.3.3 安全性
20.4 本章總結
第21章 KRaft模塊的設計與實現原理
21.1 KRaft請求處理流程
21.1.1 Raft狀態
21.1.2 Raft請求類型
21.1.3 處理Raft請求
21.2 KRaft leader選舉機制
21.2.1 初始化Raft狀態
21.2.2 發送投票請求
21.2.3 投票流程
21.2.4 當選leader節點
21.3 KRaft生成Record數據
21.4 KRaft數據存儲機制
21.5 KRaft數據同步機制
21.6 KRaft提交Record數據
21.6.1 監聽器機制
21.6.2 BrokerMetadataListener
21.6.3 QuorumMetaLogListener
21.7 KRaft節點監控與故障轉移機制
21.7.1 節點註冊
21.7.2 心跳請求
21.7.3 故障轉移
21.8 KRaft數據清理機制
21.8.1 快照管理
21.8.2 歷史數據清理
21.9 本章總結
第5部分 高級應用
第22章 安全
22.1 TLS加密
22.1.1 準備TLS證書和密鑰
22.1.2 Kafka配置
22.1.3 Pulsar配置
22.2 認證與授權
22.2.1 Kafka SCRAM認證與授權
22.2.2 Pulsar JWT認證與授權
22.3 本章總結
第23章 跨地域復制與分層存儲
23.1 跨地域復制
23.1.1 MirrorMaker
23.1.2 Pulsar跨地域復制機制
23.2 分層存儲
23.3 本章總結
第24章 監控與管理
24.1 Kafka監控與管理平臺
24.1.1 Kafka監控
24.1.2 Kafka管理平臺
24.2 Pulsar監控與管理平臺
24.2.1 Pulsar監控
24.2.2 Pulsar管理平臺
24.3 本章總結
第25章 連接器
25.1 Kafka Connect
25.1.1 應用示例
25.1.2 開發實踐
25.2 Pulsar IO
25.2.1 應用示例
25.2.2 開發實踐
25.3 本章總結
第26章 流計算引擎
26.1 Kafka Stream
26.1.1 應用示例
26.1.2 時間窗口
26.1.3 語義保證和線程模型
26.2 Pulsar Function
26.2.1 應用示例
26.2.2 部署
26.2.3 時間窗口
26.2.4 Function運行模式和消息語義保證
26.3 本章總結