本書旨在介紹Kafka的核心功能,以及如何在實際項目中使用它。本書主要內容包括Kafka的核心概念,如何使用Kafka Connect設置和執(zhí)行基本ETL任務,如何將Kafka用于大型數(shù)據(jù)項目,如何執(zhí)行管理任務,如何生成和使用事件流,如何在Java應用程序中使用Kafka,如何將Kafka實現(xiàn)為消息隊列等。通過閱讀本書,讀者應該很快就會掌握如何在日常工作流程中使用Kafka,還可以開始深入研究更高級的Kafka主題。
本書適合軟件開發(fā)人員閱讀,也可作為計算機相關專業(yè)的教材。
適讀人群 :本書適合Java開發(fā)人員、大數(shù)據(jù)平臺開發(fā)人員以及對分布式系統(tǒng)感興趣的讀者閱讀,也適合高等院校、培訓結構相關專業(yè)的師生使用。 1.Confluent 聯(lián)合創(chuàng)辦人饒軍傾情推薦,基于Kafka 3.1.0,系統(tǒng)介紹Kafka的功能和應用。
2.Kafka是一種高性能的軟件總線,為完成事件流處理、日志記錄、數(shù)據(jù)分析和其他數(shù)據(jù)處理任務提供了便利,非常適合軟件開發(fā)人員學習。
3.本書詳細講解了Kafka的核心特性,并結合實際的示例展示了Kafka的應用,讓讀者能輕松使用Kafka為應用程序實現(xiàn)運營數(shù)據(jù)監(jiān)控和大規(guī)模事件處理。
Dylan Scott是一名軟件開發(fā)人員,擁有十多年Java和Perl開發(fā)經(jīng)驗。在將Kafka作為大型數(shù)據(jù)遷移項目的消息系統(tǒng)之后,Dylan又進一步探索Kafka和流式處理的世界。他使用過各種技術和消息隊列產(chǎn)品,包括Mule、RabbitMQ、MQSeries和Kafka。Dylan擁有Sun Java SE 1.6、Oracle Web EE 6、Neo4j和Jenkins Engineer等方面的證書。
Viktor Gamov就職于Confluent公司。Confluent就是那家開發(fā)基于Kafka的事件流平臺的公司。在Viktor的整個職業(yè)生涯中,他使用開源技術構建企業(yè)應用程序架構,積累了全面的專業(yè)知識。他喜歡幫助架構師與開發(fā)人員設計和開發(fā)低延遲、可伸縮且高可用的分布式系統(tǒng)。Viktor不僅是分布式系統(tǒng)、流式數(shù)據(jù)、JVM和DevOps等主題的專業(yè)會議講師,還是JavaOne、Devoxx、OSCON、QCon等活動的?。他是Enterprise Web Development(O’Reilly出版社)一書的合著者。
Dave Klein擔任過開發(fā)人員、架構師、項目經(jīng)理、作家、培訓師、會議組織者等,主要研究方向是Kafka事件流。
目錄
第 一部分 快速入門
第 1章 Kafka簡介 3
1.1 什么是Kafka 4
1.2 Kafka的使用情況 7
1.2.1 開發(fā)人員的Kafka 7
1.2.2 向管理人員介紹Kafka 9
1.3 關于Kafka的謎團 9
1.3.1 Kafka只能與Hadoop一起使用 9
1.3.2 Kafka與其他消息系統(tǒng)是一樣的 10
1.4 現(xiàn)實世界中的Kafka 11
1.4.1 早期的例子 11
1.4.2 后來的例子 12
1.4.3 什么時候不適合使用Kafka 13
1.5 其他在線資源 14
總結 14
第 2章 了解Kafka 15
2.1 發(fā)送和讀取一條消息 15
2.2 什么是Broker 16
2.3 Kafka之旅 20
2.3.1 生產(chǎn)者和消費者 20
2.3.2 主題 23
2.3.3 ZooKeeper 24
2.3.4 Kafka的高級架構 25
2.3.5 提交日志 26
2.4 其他API及其用途 26
2.4.1 Kafka Streams 27
2.4.2 Kafka Connect 28
2.4.3 AdminClient 28
2.4.4 ksqlDB 29
2.5 Confluent的客戶端 29
2.6 流式處理及術語解釋 32
2.6.1 流式處理 33
2.6.2 精確一次語義 34
總結 34
第二部分 應用Kafka
第3章 設計并實現(xiàn)一個Kafka項目 37
3.1 設計一個Kafka項目 37
3.1.1 重新設計已有的數(shù)據(jù)
架構 38
3.1.2 改變的第 一步 38
3.1.3 內置的特性 38
3.1.4 票據(jù)數(shù)據(jù) 40
3.2 設計傳感器事件 42
3.2.1 現(xiàn)有的問題 43
3.2.2 為什么Kafka是最合適的 44
3.2.3 關于我們的設計 45
3.2.4 用戶數(shù)據(jù)需求 46
3.2.5 應用我們的問題清單 46
3.2.6 評審我們的設計 49
3.3 數(shù)據(jù)格式 50
3.3.1 數(shù)據(jù)規(guī)劃 50
3.3.2 配置依賴項 51
總結 56
第4章 生產(chǎn)者——數(shù)據(jù)的源頭 57
4.1 一個示例 57
4.2 生產(chǎn)者的配置參數(shù) 61
4.2.1 配置Broker地址列表 61
4.2.2 如何提升速度(或安全性) 62
4.2.3 時間戳 64
4.3 代碼實現(xiàn) 65
總結 73
第5章 消費者——解鎖數(shù)據(jù) 74
5.1 一個示例 74
5.1.1 消費者的配置屬性 76
5.1.2 理解偏移量 79
5.2 消費者之間的交互 82
5.3 跟蹤偏移量 82
5.3.1 組協(xié)調器 83
5.3.2 分區(qū)的分配策略 85
5.4 提交偏移量 86
5.5 從壓實的主題中讀取數(shù)據(jù) 88
5.6 工廠示例的消費者代碼 88
5.6.1 偏移量的配置選項 89
5.6.2 滿足設計需求 90
總結 93
第6章 Broker 94
6.1 Broker簡介 94
6.2 ZooKeeper的角色 95
6.3 Broker級別的配置選項 96
6.3.1 Kafka的應用程序日志 98
6.3.2 服務器日志 98
6.3.3 管理集群狀態(tài) 98
6.4 分區(qū)的首領和它們的職責 99
6.5 窺探Kafka 102
6.5.1 集群維護 103
6.5.2 增加一個Broker 104
6.5.3 升級集群 104
6.5.4 升級客戶端 104
6.5.5 備份 105
6.6 關于有狀態(tài)系統(tǒng) 105
6.7 練習 106
總結 108
第7章 主題和分區(qū) 109
7.1 主題 109
7.1.1 主題的配置選項 112
7.1.2 復制系數(shù) 114
7.2 分區(qū) 114
7.2.1 分區(qū)的位置 114
7.2.2 查看日志 115
7.3 使用EmbeddedKafkaCluster 116
7.4 主題壓實 118
總結 120
第8章 Kafka的存儲 121
8.1 需要保存數(shù)據(jù)多長時間 121
8.2 移動數(shù)據(jù) 122
8.2.1 保留原始事件 123
8.2.2 擺脫批處理思維 123
8.3 工具 123
8.3.1 Apache Flume 124
8.3.2 Red Hat Debezium 125
8.3.3 Secor 126
8.3.4 數(shù)據(jù)存儲應用示例 126
8.4 將數(shù)據(jù)放回Kafka 127
8.5 Kafka支持的架構 128
8.5.1 Lambda架構 128
8.5.2 Kappa架構 129
8.6 多集群設置 130
8.7 基于云和容器的存儲方案 131
總結 131
第9章 管理Kafka——工具和日志 132
9.1 管理客戶端 132
9.1.1 在代碼中使用AdminClient 133
9.1.2 kcat 134
9.1.3 Confluent REST Proxy API 135
9.2 將Kafka作為systemd服務運行 137
9.3 日志 137
9.3.1 Kafka的應用程序日志 138
9.3.2 ZooKeeper的日志 139
9.4 防火墻 140
9.5 指標 141
9.6 跟蹤 143
9.6.1 生產(chǎn)者邏輯 144
9.6.2 消費者邏輯 145
9.6.3 覆蓋客戶端 147
9.7 通用的監(jiān)控工具 148
總結 148
第三部分 Kafka進階
第 10章 保護Kafka 151
10.1 安全性基礎 152
10.1.1 用SSL加密 153
10.1.2 Broker和客戶端之間的 SSL 154
10.1.3 Broker之間的SSL 156
10.2 Kerberos與SASL 157
10.3 Kafka的授權機制 158
10.3.1 訪問控制列表 158
10.3.2 基于角色的訪問控制 159
10.4 ZooKeeper 160
10.5 配額 160
10.5.1 網(wǎng)絡帶寬配額 161
10.5.2 請求速率配額 162
10.6 靜態(tài)數(shù)據(jù) 163
總結 164
第 11章 Schema Registry 165
11.1 Kafka成熟度模型 165
11.1.1 級別0 166
11.1.2 級別1 166
11.1.3 級別2 167
11.1.4 級別3 168
11.2 Schema Registry 168
11.2.1 安裝Confluent Schema Registry 168
11.2.2 注冊表的配置 169
11.3 Schema的特性 170
11.3.1 REST API 170
11.3.2 客戶端庫 171
11.4 兼容性規(guī)則 172
11.5 Schema Registry之外的選擇 174
總結 175
第 12章 流式處理 176
12.1 Kafka Streams 177
12.1.1 KStreams API DSL 178
12.1.2 KTable API 181
12.1.3 GlobalKTable API 181
12.1.4 Processor API 182
12.1.5 設置Kafka Streams 184
12.2 ksqlDB——一個事件流 數(shù)據(jù)庫 185
12.2.1 查詢 186
12.2.2 本地開發(fā) 186
12.2.3 ksqlDB的架構 188
12.3 更進一步 188
12.3.1 Kafka改進提案 188
12.3.2 值得了解的Kafka項目 189
12.3.3 社區(qū)Slack頻道 189
總結 189
附錄A 安裝 190
附錄B 客戶端示例 197