Apache Kafka 實戰
內容描述
本書是涵蓋Apache Kafka各方面的具有實踐指導意義的工具書和參考書。作者結合典型的使用場景,對Kafka整個技術體系進行了較為全面的講解,以便讀者能夠舉一反三,直接應用於實踐。同時,本書還對Kafka的設計原理及其流式處理組件進行了較深入的探討,並給出了翔實的案例。 本書共分為10章:第1章全面介紹消息引擎系統以及Kafka的基本概念與特性,快速帶領讀者走進Kafka的世界;第2章簡要回顧了Apache Kafka的發展歷史;第3章詳細介紹了Kafka集群環境的搭建;第4、5章深入探討了Kafka客戶端的使用方法;第6章帶領讀者一覽Kafka內部設計原理;第7~9章以實例的方式講解了Kafka集群的管理、監控與調優;第10章介紹了Kafka新引入的流式處理組件。
目錄大綱
目錄
第1章認識Apache Kafka 1
1.1 Kafka快速入門1
1.1.1下載並解壓縮Kafka二進制代碼壓縮包文件2
1.1.2啟動服務器3
1.1.3創建topic 3
1.1.4發送消息4
1.1.5消費消息4
1.2消息引擎系統5
1.2.1消息設計6
1.2.2傳輸協議設計6
1.2.3消息引擎範型6
1.2.4 Java消息服務8
1.3 Kafka概要設計8
1.3.1吞吐量/延時8
1.3. 2消息持久化11
1.3.3負載均衡和故障轉移12
1.3.4伸縮性13
1.4 Kafka基本概念與術語13
1.4.1消息14
1.4.2 topic和partition 16
1.4.3 offset 17
1.4.4 replica 18
1.4 .5 leader和follower 18
1.4.6 ISR 19
1.5 Kafka使用場景20
1.5.1消息傳輸20
1.5.2網站行為日誌追踪20
1.5.3審計數據收集20
1.5.4日誌收集20
1.5.5 Event Sourcing 21
1.5.6流式處理21
1.6本章小結21
第2章Kafka發展歷史22
2.1 Kafka的歷史22
2.1.1背景22
2.1.2 Kafka橫空出世23
2.1.3 Kafka開源24
2.2 Kafka版本變遷25
2.2.1 Kafka的版本演進25
2.2.2 Kafka的版本格式26
2.2.3新版本功能簡介26
2.2.4舊版本功能簡介31
2.3如何選擇Kafka版本35
2.3.1根據功能場景35
2.3. 2根據客戶端使用場景35
2.4 Kafka與Confluent 36
2.5本章小結37
第3章Kafka線上環境部署38
3.1集群環境規劃38
3.1.1操作系統的選型38
3.1.2磁盤規劃40
3.1.3磁盤容量規劃42
3.1.4內存規劃43
3.1.5 CPU規劃43
3.1.6帶寬規劃44
3.1.7典型線上環境配置45
3.2偽分佈式環境安裝45
3.2.1安裝Java 46
3.2.2安裝ZooKeeper 47
3.2.3安裝單節點Kafka集群48
3.3多節點環境安裝49
3.3.1安裝多節點ZooKeeper集群50
3.3.2安裝多節點Kafka 54
3.4驗證部署55
3.4.1測試topic創建與刪除55
3.4.2測試消息發送與消費57
3.4.3生產者吞吐量測試58
3.4.4消費者吞吐量測試58
3.5參數設置59
3.5.1 broker端參數59
3.5.2 topic級別參數62
3.5.3 GC參數63
3.5.4 JVM參數64
3.5.5 OS參數64
3.6本章小結65
第4章producer開發66
4.1 producer概覽66
4.2構造producer 69
4.2.1 producer程序實例69
4.2.2 producer主要參數75
4.3消息分區機制80
4.3.1分區策略80
4.3.2自定義分區機制80
4.4消息序列化83
4.4.1默認序列化83
4.4.2自定義序列化84
4.5 producer攔截器87
4.6無消息丟失配置90
4.6.1 producer端配置91
4.6.2 broker端配置92
4.7消息壓縮92
4.7.1 Kafka支持的壓縮算法93
4.7.2算法性能比較與調優93
4.8多線程處理95
4.9舊版本producer 96
4.10本章小結98
第5章consumer開發99
5.1 consumer概覽99
5.1.1消費者(consumer) 99
5.1.2消費者組(consumer group) 101
5.1.3位移(offset) 102
5.1.4位移提交103
5.1.5 consumer_offsets 104
5.1.6消費者組重平衡(consumer group rebalance) 106
5.2構建consumer 106
5.2.1 consumer程序實例106
5.2.2 consumer腳本命令111
5.2.3 consumer主要參數112
5.3訂閱topic 115
5.3 .1訂閱topic列表115
5.3.2基於正則表達式訂閱topic 115
5.4消息輪詢115
5.4.1 poll內部原理115
5.4.2 poll使用方法116
5.5位移管理118
5.5.1 consumer位移119
5.5.2新版本consumer位移管理120
5.5.3自動提交與手動提交121
5.5.4舊版本consumer位移管理123
5.6重平衡(rebalance) 123
5.6.1 rebalance概覽123
5.6.2 rebalance觸發條件124
5.6.3 rebalance分區分配124
5.6.4 rebalance generation 126
5.6.5 rebalance協議126
5.6.6 rebalance流程127
5.6.7 rebalance監聽器128
5.7解序列化130
5.7.1默認解序列化器130
5.7.2自定義解序列化器131
5.8多線程消費實例132
5.8.1每個線程維護一個KafkaConsumer 133
5.8.2單KafkaConsumer實例+多worker線程135
5.8.3兩種方法對比140
5.9獨立consumer 141
5.10舊版本consumer 142
5.10.1概覽142
5.10.2 high-level consumer 143
5.10.3 low-level consumer 147
5.11本章小結153
第6章Kafka設計原理154
6.1 broker端設計架構154
6.1.1消息設計155
6.1.2集群管理166
6.1.3副本與ISR設計169
6.1.4水印( watermark)和leader epoch 174
6.1.5日誌存儲設計185
6.1.6通信協議(wire protocol) 194
6.1.7 controller設計205
6.1.8 broker請求處理216
6.2 producer端設計219
6.2.1 producer端基本數據結構219
6.2.2工作流程220
6.3 consumer端設計223
6.3.1 consumer group狀態機223
6.3.2 group管理協議226
6.3.3 rebalance場景剖析227
6.4實現精確一次處理語義230
6.4.1消息交付語義230
6.4.2冪等性producer(idempotent producer) 231
6.4.3事務(transaction) 232
6.5本章小結234
第7章管理Kafka集群235
7.1集群管理235
7.1.1啟動broker 235
7.1.2關閉broker 236
7.1.3設置JMX端口237
7.1.4增加broker 238
7.1.5升級broker版本238
7.2 topic管理241
7.2.1創建topic 241
7.2.2刪除topic 243
7.2.3查詢topic列表244
7.2.4查詢topic詳情244
7.2.5修改topic 245
7.3 topic動態配置管理246
7.3.1增加topic配置246
7.3.2查看topic配置247
7.3.3刪除topic配置248
7.4 consumer相關管理248
7.4.1查詢消費者組248
7.4.2重設消費者組位移251
7.4.3刪除消費者組256
7.4.4 kafka-consumer-offset-checker 257
7.5 topic分區管理258
7.5.1 preferred leader選舉258
7.5.2分區重分配260
7.5.3增加副本因子263
7.6 Kafka常見腳本工具264
7.6.1 kafka-console-producer腳本264
7.6.2 kafka-console-consumer腳本265
7.6.3 kafka-run-class腳本267
7.6.4查看消息元數據268
7.6.5獲取topic當前消息數270
7.6.6查詢consumer_offsets 271
7.7 API方式管理集群273
7.7.1服務器端API管理topic 273
7.7.2服務器端API管理位移275
7.7.3客戶端API管理topic 276
7.7.4客戶端API查看位移280
7.7.5 0.11 .0.0版本客戶端API 281
7.8 MirrorMaker 285
7.8.1概要介紹285
7.8.2主要參數286
7.8.3使用實例287
7.9 Kafka安全288
7.9.1 SASL+ACL 289
7.9.2 SSL加密297
7.10常見問題301
7.11本章小結304
第8章監控Kafka集群305
8.1集群健康度檢查305
8.2 MBean監控306
8.2.1監控指標306
8.2.2指標分類308
8.2.3定義和查詢JMX端口309
8.3 broker端JMX監控310
8.3.1消息入站/出站速率310
8.3.2 controller存活JMX指標311
8.3.3備份不足的分區數312
8.3.4 leader分區數312
8.3.5 ISR變化速率313
8.3.6 broker I/O工作處理線程空閒率313
8.3.7 broker網絡處理線程空閒率314
8.3.8單個topic總字節數314
8.4 clients端JMX監控314
8.4.1 producer端JMX監控314
8.4.2 consumer端JMX監控316
8.5 JVM監控317
8.5.1進程狀態318
8.5.2 GC性能318
8.6 OS監控318
8.7主流監控框架319
8.7.1 JmxTool 320
8.7.2 kafka-manager 320
8.7 .3 Kafka Monitor 325
8.7.4 Kafka Offset Monitor 327
8.7.5 CruiseControl 329
8.8本章小結330
第9章調優Kafka集群331
9.1引言331
9.2確定調優目標333
9.3集群基礎調優334
9.3.1禁止atime更新335
9.3.2文件系統選擇335
9.3.3設置swapiness 336
9.3.4 JVM設置337
9.3.5其他調優337
9.4調優吞吐量338
9.5調優延時342
9.6調優持久性343
9.7調優可用性347
9.8本章小結349
第10章Kafka Connect與Kafka Streams 350
10.1引言350
10.2 Kafka Connect 351
10.2.1概要介紹351
10.2.2 standalone Connect 353
10.2.3 distributed Connect 356
10.2.4開發connector 359
10.3 Kafka Streams 362
10.3.1流處理362
10.3.2 Kafka Streams核心概念364
10.3.3 Kafka Streams與其他框架的異同368
10.3.4 Word Count實例369
10.3. 5 Kafka Streams應用開發372
10.3.6 Kafka Streams狀態查詢382
10.4 本章小結386
作者介紹
胡夕
8年分佈式系統架構和開發經驗,曾負責IBM重要產品的研發和技術支持。在搜狗任職期間主導構建了大數據分佈式流式處理平台,為實時提供業務決策提供了重要支撐。後在微博帶領團隊參與構建了微博混合雲項目核心模塊的設計與研發,成功應對春晚峰值流量。