Kafka 技術內幕 (圖文詳解Kafka源碼設計與實現)
內容描述
Kafka自LinkedIn開源以來就以高性能、高吞吐量、分佈式的特性著稱。
本書以0.10版本的源碼為基礎,深入分析了Kafka的設計與實現,包括生產者和消費者的消息處理流程,新舊消費者不同的設計方式,存儲層的實現,協調者和控制器如何確保Kafka集群的分佈式和容錯特性,兩種同步集群工具MirrorMaker和uReplicator,流處理的兩種API以及Kafka的一些高級特性等。適合Kafka開發人員閱讀。
海報:
目錄大綱
第1章Kafka入門1
1.1 Kafka流式數據平台1
1.2 Kafka的基本概念3
1.2.1分區模型3
1.2.2消費模型4
1.2.3分佈式模型5
1.3 Kafka的設計與實現6
1.3.1文件系統的持久化與數據傳輸效率6
1.3.2生產者與消費者8
1.3.3副本機制和容錯處理10
1.4快速開始11
1.4.1單機模式12
1.4.2分佈式模式14
1.4.3消費組示例16
1.5環境準備18
第2章生產者22
2.1新生產者客戶端22
2.1.1同步和異步發送消息23
2.1.2客戶端消息發送線程29
2.1.3客戶端網絡連接對象31
2.1.4選擇器處理網絡請求35
2.2舊生產者客戶端43
2.2.1事件處理器處理客戶端發送的消息44
2.2.2對消息集按照節點和分區進行整理46
2.2.3生產者使用阻塞通道發送請求48
2.3服務端網絡連接49
2.3.1服務端使用接收器接受客戶端的連接50
2.3.2處理器使用選擇器的輪詢處理網絡請求53
2.3.3請求通道的請求隊列和響應隊列56
2.3.4 Kafka請求處理線程58
2.3.5服務端的請求處理入口58
2.4小結60
第3章消費者:高級API和低級API 61
3.1消費者啟動和初始化67
3.1.1創建並初始化消費者連接器69
3.1.2消費者客戶端的線程模型70
3.1.3重新初始化消費者72
3.2消費者再平衡操作73
3.2.1分區的所有權74
3.2.2為消費者分配分區75
3.2.3創建分區信息對象78
3.2.4關閉和更新拉取線程管理器80
3.2.5分區信息對象的偏移量80
3.3消費者拉取數據82
3.3.1拉取線程管理器82
3.3.2抽象拉取線程87
3.3.3消費者拉取線程90
3.4消費者消費消息94
3.4.1 Kafka消息流94
3.4.2消費者迭代消費消息95
3.5消費者提交分區偏移量97
3.5.1提交偏移量到ZK 98
3.5.2提交偏移量到內部主題99
3.5.3連接偏移量管理器101
3.5.4服務端處理提交偏移量的請求103
3.5.5緩存分區的偏移量106
3.6消費者低級API示例108
3.6.1消息消費主流程109
3.6.2找出分區的主副本112
3.6. 3獲取分區的讀取偏移量113
3.6.4發送拉取請求並消費消息116
3.7小結117
3.7.1消費者線程模型117
3.7.2再平衡和分區分配119
第4章新消費者121
4.1新消費者客戶端125
4.1.1消費者的訂閱狀態125
4.1.2消費者輪詢的準備工作134
4.1.3消費者輪詢的流程138
4.1.4消費者拉取消息146
4.1.5消費者獲取記錄149
4.1.6消費消息160
4.2消費者的網絡客戶端輪詢161
4.2.1異步請求162
4.2.2異步請求高級模式169
4.2.3網絡客戶端輪詢184
4.3心跳任務188
4.3.1發送心跳請求188
4.3.2心跳狀態189
4.3.3運行心跳任務191
4.3.4處理心跳結果的示例192
4.3.5心跳和協調者的關係193
4.4消費者提交偏移量195
4.4.1自動提交任務195
4.4.2將拉取偏移量作為提交偏移量197
4.4.3同步提交偏移量201
4.4.4消費者的消息處理語義202
4.5小結206
第5章協調者210
5.1消費者加入消費組211
5.1.1元數據與分區分配器212
5.1.2消費者的加入組和同步組213
5.1.3主消費者執行分配任務220
5.1.4加入組的準備、完成和監聽器224
5.2協調者處理請求229
5.2.1服務端定義發送響應結果的回調方法229
5.2.2消費者和消費組元數據232
5.2.3協調者處理請求前的條件檢查236
5.2.4協調者調用回調方法發送響應給客戶端237
5.3延遲的加入組操作242
5.3.1 “準備再平衡” 242
5.3.2延遲操作和延遲緩存244
5.3.3嘗試完成延遲的加入操作246
5.3.4消費組穩定後,原有消費者重新加入消費組250
5.3.5消費組未穩定,原有消費者重新加入消費組251
5.4消費組狀態機254
5.4.1再平衡操作與監聽器254
5.4.2 費組的狀態轉換262
5.4.3協調者處理“加入組請求” 264
5.4.4協調者處理“同步組請求” 274
5.4.5協調者處理“離開組請求” 276
5.4.6再平衡超時與會話超時278
5.4.7延遲的心跳282
5.5小結290
第6章存儲層293
6.1日誌的讀寫293
6.1.1分區、副本、日誌、日誌分段294
6.1.2寫入日誌297
6.1.3日誌分段305
6.1.4讀取日誌315
6.1.5日誌管理329
6.1.6日誌壓縮336
6.2服務端處理讀寫請求348
6.2.1副本管理器351
6.2.2分區與副本362
6.3延遲操作373
6.3.1延遲操作接口374
6.3.2延遲操作與延遲緩存383
6.3.3延遲緩存391
6.4小結400
第7章控制器402
7.1 Kafka控制器402
7.1.1控制器選舉403
7.1.2控制器上下文406
7.1.3 ZK監聽器408
7.1.4分區狀態機和副本狀態機410
7.1.5刪除主題430
7.1.6重新分配分區436
7.1.7控制器的網絡通道管理器445
7.2服務端處理LeaderAndIsr請求448
7.2.1創建分區449
7.2.2創建主副本、備份副本451
7.2.3消費組元數據遷移463
7.3元數據緩存468
7.3.1服務端的元數據緩存472
7.3.2客戶端更新元數據473
7.4 Kafka服務關閉483
7.5小結487
第8章基於Kafka構建數據流管道490
8.1 Kafka集群同步工具:MirrorMaker 490
8.1 .1單機模擬數據同步491
8.1.2數據同步的流程493
8.2 Uber集群同步工具:uReplicator 498
8.2.1 Apache Helix介紹498
8.2.2 Helix控制器501
8.2.3 Helix工作節點504
8.3 Kafka連接器505
8.3 .1連接器的使用示例507
8.3.2開發一個簡單的連接器510
8.3.3連接器的架構模型515
8.3.4 Herder的實現520
8.3.5 Worker的實現524
8.3.6配置存儲與狀態存儲530
8.3.7連接器與任務的實現550
8.4小結565
第9章Kafka流處理569
9.1低級Processor API 569
9.1.1流處理應用程序示例569
9.1.2流處理的拓撲575
9.1.3流處理的線程模型580
9.1.4狀態存儲613
9.2高級流式DSL 636
9.2.1 DSL應用程序示例636
9.2.2 KStream和KTable 638
9.2.3連接操作665
9.2.4窗口操作672
9.3小結684
第10章高級特性介紹686
10.1客戶端配額686
10.2消息與時間戳692
10.3事務處理699
10.4小結703
作者介紹
鄭奇煌
目前就職於杭州某互聯網風控公司,主要專注於大數據和流計算。對源碼研究有一定的心得體會,樂於分享,個人博客:zqhxuyuan.github.io。