Apache Kafka是一個(gè)流行的分布式流平臺(tái),充當(dāng)消息隊(duì)列或企業(yè)消息傳遞系統(tǒng)。它用來(lái)發(fā)布和訂閱數(shù)據(jù)流,并在發(fā)生錯(cuò)誤時(shí)以容錯(cuò)方式處理它們。
本書共13章,全面介紹使用Apache Kafka等大數(shù)據(jù)工具設(shè)計(jì)和構(gòu)建企業(yè)級(jí)流應(yīng)用方面的內(nèi)容,包括構(gòu)建流應(yīng)用程序的*實(shí)踐,并解決了一些常見(jiàn)的挑戰(zhàn),例如如何高效地使用Kafka輕松處理高容量數(shù)據(jù)。完成本書的學(xué)習(xí)后,讀者能使用Kafka設(shè)計(jì)高效的流數(shù)據(jù)應(yīng)用程序。
本書既適合Kafka初學(xué)者、大數(shù)據(jù)應(yīng)用開(kāi)發(fā)人員、大數(shù)據(jù)應(yīng)用運(yùn)維人員閱讀,也適合高等院校與培訓(xùn)學(xué)校相關(guān)專業(yè)的師生教學(xué)參考。
Apache Kafka是一個(gè)流行的分布式流平臺(tái),它充當(dāng)消息隊(duì)列或企業(yè)消息系統(tǒng)。它允許你發(fā)布和訂閱記錄流,并以容錯(cuò)的方式處理它們。
本書是使用Apache Kafka集成其他大數(shù)據(jù)工具設(shè)計(jì)和構(gòu)建企業(yè)級(jí)流應(yīng)用程序的綜合指南。它包括構(gòu)建此類應(yīng)用程序的*實(shí)踐,并解決了一些常見(jiàn)的挑戰(zhàn)性問(wèn)題,例如如何有效地使用Kafka來(lái)輕松處理高容量數(shù)據(jù)。本書首先介紹了消息系統(tǒng)類型,然后詳細(xì)介紹了Apache Kafka及其內(nèi)部細(xì)節(jié)。本書的第二部分介紹了如何使用各種框架和工具(如Apache Spark、Apache Storm等)設(shè)計(jì)流應(yīng)用程序。一旦你掌握了基礎(chǔ)知識(shí),我們將帶你理解Apache Kafka中更高級(jí)的概念,例如容量規(guī)劃和安全性。
到本書結(jié)束時(shí),你將掌握使用Apache Kafka時(shí)所需要的所有信息,并使用它設(shè)計(jì)高效的流數(shù)據(jù)應(yīng)用。
Apache Kafka是一個(gè)流行的分布式流平臺(tái),充當(dāng)消息隊(duì)列或企業(yè)消息系統(tǒng),允許你發(fā)布和訂閱流記錄,并以容錯(cuò)的方式進(jìn)行處理。
本書是使用Apache Kafka和其他大數(shù)據(jù)工具設(shè)計(jì)和構(gòu)建企業(yè)級(jí)流應(yīng)用(應(yīng)用程序)的綜合指南,包括構(gòu)建此類應(yīng)用程序的最佳實(shí)踐,并解決了一些常見(jiàn)的挑戰(zhàn)性問(wèn)題,例如如何有效地使用Kafka來(lái)輕松處理高容量數(shù)據(jù)。本書首先介紹消息系統(tǒng)類型,然后詳細(xì)介紹Apache Kafka及其內(nèi)部細(xì)節(jié),接著介紹如何使用各種框架和工具(如Apache Spark、Apache Storm等)設(shè)計(jì)流應(yīng)用程序。掌握了這些基礎(chǔ)知識(shí)以后,我們將帶你理解Apache Kafka中更高級(jí)的概念,例如容量規(guī)劃和安全性。
到本書結(jié)束時(shí),你將掌握使用Apache Kafka時(shí)所需要的所有信息,并使用它設(shè)計(jì)高效的流數(shù)據(jù)應(yīng)用程序。
本書涵蓋的內(nèi)容
第1章,消息系統(tǒng)介紹,介紹消息系統(tǒng)的概念。本章涵蓋了消息系統(tǒng)及其企業(yè)需求的概述,它進(jìn)一步強(qiáng)調(diào)了使用諸如點(diǎn)到點(diǎn)或發(fā)布/訂閱等消息系統(tǒng)的不同方式,并引入了AMQP。
第2章,介紹Kafka分布式消息平臺(tái),介紹諸如Kafka這樣的分布式消息平臺(tái)。本章涵蓋了Kafka架構(gòu),并觸及內(nèi)部組件,進(jìn)一步探討了每個(gè)Kafka組件的角色和重要性,以及它們?nèi)绾螌?duì)低延遲、可靠性和Kafka消息系統(tǒng)的可伸縮性做出貢獻(xiàn)。
第3章,深入研究Kafka生產(chǎn)者,是關(guān)于如何向Kafka系統(tǒng)發(fā)布消息的內(nèi)容。本章進(jìn)一步介紹了Kafka生產(chǎn)者APIs及其用法,展示了使用Java和Scala編程語(yǔ)言調(diào)用Kafka生產(chǎn)者APIs的例子。需要深入了解生產(chǎn)者消息流以及一些用于向Kafka Topics生產(chǎn)消息的常見(jiàn)模式,為Kafka的生產(chǎn)者提供了一些性能優(yōu)化的技術(shù)。
第4章,深入研究Kafka消費(fèi)者,是關(guān)于如何從Kafka系統(tǒng)中消費(fèi)消息。這也包括Kafka消費(fèi)者APIs及其使用,展示了使用Java和Scala編程語(yǔ)言調(diào)用Kafka消費(fèi)者APIs的例子,深入探討了消費(fèi)者消息流和一些常見(jiàn)的從Kafka Topics中消費(fèi)消息的模式,為Kafka消費(fèi)者提供了一些性能優(yōu)化的技術(shù)。
第5章,集成Kafka構(gòu)建Spark Streaming應(yīng)用,是關(guān)于如何將Kafka與流行的分布式處理引擎Apache Spark集成在一起的內(nèi)容。本章提供了Apache Kafka的簡(jiǎn)要概述,將Kafka與Spark集成的不同方法以及它們的優(yōu)缺點(diǎn),并展示了Java和Scala中的用例。
第6章,集成Kafka構(gòu)建Spark Storm應(yīng)用,是關(guān)于如何將Kafka與流行的實(shí)時(shí)處理引擎Apache Storm集成在一起的內(nèi)容。本章還簡(jiǎn)要介紹了Apache Storm和Apache Heron,展示了使用Apache Storm和Kafka進(jìn)行事件處理的不同方法的示例,包括有保證的事件處理。
第7章,使用Kafka與Confluent Platform,是關(guān)于新興的流平臺(tái)Confluent的,使你能夠有效地使用Kafka和許多其他額外的功能,展示了許多本章涵蓋主題的許多例子。
第8章,使用Kafka構(gòu)建ETL管道,介紹Kafka Connect,這是一種常見(jiàn)組件,用于構(gòu)建涉及Kafka的ETL管道,強(qiáng)調(diào)如何在ETL管道中使用Kafka Connect,并討論一些相關(guān)深入的技術(shù)概念。
第9章,使用Kafka Streams構(gòu)建流應(yīng)用程序,是關(guān)于如何使用Kafka Stream構(gòu)建流應(yīng)用程序的內(nèi)容,這是Kafka 0.10發(fā)行版的一個(gè)組成部分,也包括使用Kafka Stream構(gòu)建快速可靠的流應(yīng)用程序,包括示例。
第10章,Kafka集群部署,著重于在企業(yè)級(jí)生產(chǎn)系統(tǒng)上部署Kafka集群,深入涵蓋了Kafka集群,例如如何進(jìn)行容量規(guī)劃、如何管理單個(gè)/多集群部署等,還介紹了如何在多租戶環(huán)境中管理Kafka以及Kafka數(shù)據(jù)遷移所涉及的各個(gè)步驟。
第11章,在大數(shù)據(jù)應(yīng)用程序中使用Kafka,介紹了在大數(shù)據(jù)應(yīng)用程序中使用Kafka的一些方面,包括如何管理Kafka中的高容量、如何確保有保證的消息傳遞、處理故障而不丟失數(shù)據(jù)的最佳方式以及在大數(shù)據(jù)管道中使用Kafka時(shí)可應(yīng)用的一些治理原則。
第12章,Kafka安全,是關(guān)于保護(hù)Kafka集群的內(nèi)容,包括身份驗(yàn)證、授權(quán)機(jī)制以及示例。
第13章,流應(yīng)用程序設(shè)計(jì)的考慮,是關(guān)于構(gòu)建流應(yīng)用程序的不同設(shè)計(jì)考慮的內(nèi)容,可以讓你了解并行性、內(nèi)存調(diào)優(yōu)等方面,全面提供了設(shè)計(jì)流應(yīng)用程序的不同范式。
對(duì)于這本書你需要什么
你將需要以下軟件來(lái)處理本書中的示例:
Apache Kafka、大數(shù)據(jù)、Apache Hadoop、發(fā)布和訂閱、企業(yè)消息系統(tǒng)、分布式流、生產(chǎn)者API、消費(fèi)者API、Streams API、Connect API。
這本書適合誰(shuí)
如果你想以最簡(jiǎn)單的方式學(xué)習(xí)如何使用Apache Kafka和Kafka生態(tài)系統(tǒng)中的各種工具,本書就是為你準(zhǔn)備的。需要具有一些Java編程經(jīng)驗(yàn)才能充分利用這本書。
排版約定
在本書中,你將會(huì)發(fā)現(xiàn)許多區(qū)分不同類型信息的文本格式。下面是這些樣式的一些例子及其含義的解釋。
代碼塊的設(shè)置如下:
import org.apache.Kafka.clients.producer.KafkaProducer;
import org.apache.Kafka.clients.producer.ProducerRecord;
import org.apache.Kafka.clients.producer.RecordMetadata;
任何命令行輸入或輸出的寫法如下:
sudo su - hdfs -c "hdfs dfs -chmod 777 /tmp/hive"
sudo chmod 777 /tmp/hive
部分新術(shù)語(yǔ)和重要單詞會(huì)以粗體顯示。例如,在屏幕上看到的單詞或菜單中出現(xiàn)的文字如下所示:為了下載新模塊,我們將轉(zhuǎn)到Files | Settings | Project Name | Project Interpreter。
警告或重要提示使用圖標(biāo):
提示和技巧使用圖標(biāo):
讀者反饋
歡迎來(lái)自我們讀者的反饋。讓我們知道你對(duì)這本書的看法你喜歡或不喜歡的內(nèi)容。讀者反饋對(duì)我們來(lái)說(shuō)很重要,因?yàn)樗梢詭椭覀冮_(kāi)發(fā)出你真正可以獲得最大收益的主題。
為了給我們提供反饋,請(qǐng)發(fā)送E-mail至:jiangshouzhuang@gmail.com,并在你的郵件主題中注明這本書的書名。
下載示例代碼
本書的代碼包托管在GitHub上,譯者的GitHub網(wǎng)址為:
https://github.com/jiangshouzhuang/Building-Data-Streaming-Applications-with-Apache-Kafka
原書的Github網(wǎng)址為:
https://github.com/PacktPublishing/Building-Data-Streaming-Applications-with-Apache-Kafka
為了方便讀者下載,給出這兩個(gè)網(wǎng)址的二維碼如下:
下載本書的彩色圖像
我們還為你提供PDF文件,其中包含本書中使用的屏幕截圖/圖表的彩色圖像。彩色圖像將幫助你更好地理解輸出的細(xì)節(jié)。我們已經(jīng)將彩色圖像的PDF文件放在了GitHub上面,網(wǎng)址為:
https://github.com/jiangshouzhuang/Building-Data-Streaming-Applications-with-Apache-Kafka/blob/master/ColorImages/BuildingDataStreamingApplicationswithApacheKafka_ColorImages.pdf
譯者介紹
蔣守壯,現(xiàn)就職于金拱門(中國(guó))有限公司,擔(dān)任大數(shù)據(jù)卓越中心高級(jí)工程和平臺(tái)經(jīng)理,負(fù)責(zé)大數(shù)據(jù)平臺(tái)的架構(gòu)和產(chǎn)品研發(fā)。譯者擁有多年豐富的大數(shù)據(jù)生產(chǎn)實(shí)戰(zhàn)經(jīng)驗(yàn)和產(chǎn)品研發(fā)能力,著有圖書《基于Apache Kylin構(gòu)建大數(shù)據(jù)分析平臺(tái)》。
蔣守壯,現(xiàn)就職于金拱門(中國(guó))有限公司,擔(dān)任大數(shù)據(jù)卓越中心高級(jí)工程和平臺(tái)經(jīng)理,負(fù)責(zé)大數(shù)據(jù)平臺(tái)的架構(gòu)和產(chǎn)品研發(fā)。譯者擁有多年豐富的大數(shù)據(jù)生產(chǎn)實(shí)戰(zhàn)經(jīng)驗(yàn)和產(chǎn)品研發(fā)能力,著有圖書《基于Apache Kylin構(gòu)建大數(shù)據(jù)分析平臺(tái)》。
其他生產(chǎn)者配置 40
Java編程語(yǔ)言:Kafka生產(chǎn)者示例 42
常見(jiàn)的消息發(fā)布模式 44
最佳實(shí)踐 46
總 結(jié) 48
第4章 深入研究Kafka消費(fèi)者 49
Kafka消費(fèi)者內(nèi)部機(jī)制 50
理解Kafka消費(fèi)者的職責(zé) 50
Kafka消費(fèi)者API 52
消費(fèi)者配置 52
訂閱和輪詢 54
提交和輪詢 56
其他配置 59
利用Java實(shí)現(xiàn)Kafka消費(fèi)者 60
利用Scala實(shí)現(xiàn)Kafka消費(fèi)者 62
Rebalance listeners 64
常用的消息消費(fèi)模式 64
最佳實(shí)踐 67
總 結(jié) 68
第5章 集成Kafka 構(gòu)建Spark Streaming應(yīng)用 69
Spark介紹 70
Spark架構(gòu) 70
Spark的核心 72
Spark生態(tài)系統(tǒng) 73
Spark Streaming 75
Receiver-based集成 75
Receiver-based approach的缺點(diǎn) 77
Receiver-based集成的Java示例 77
Receiver-based集成的Scala示例 79
Direct approach 80
Direct approach的Java示例 82
Direct approach的Scala示例 83
日志處理用例欺詐IP檢測(cè) 84
Maven 85
生產(chǎn)者 89
Reader屬性 89
生產(chǎn)者代碼 90
欺詐IP查找 92
暴露Hive表 93
Streaming代碼 94
總 結(jié) 97
第6章 集成Kafka構(gòu)建Storm應(yīng)用 98
Apache Storm介紹 98
Storm集群架構(gòu) 99
Storm應(yīng)用程序的概念 100
Apache Heron介紹 101
Heron架構(gòu) 102
Heron topology架構(gòu) 103
集成Apache Kafka與Apache Storm - Java 104
示 例 105
集成Apache Kafka與Apache Storm - Scala 110
用例使用Storm、Kafka和Hive處理日志 114
生產(chǎn)者 118
生產(chǎn)者代碼 119
欺詐IP查找 122
Storm應(yīng)用程序 123
運(yùn)行項(xiàng)目 132
總 結(jié) 133
第7章 使用Kafka與 Confluent Platform 134
Confluent Platform介紹 135
深入Confluent Platform架構(gòu) 136
理解Kafka Connect 和 Kafka Stream 139
Kafka Streams 139
使用Schema Registry與Avro交互 140
將Kafka數(shù)據(jù)移動(dòng)到HDFS 142
Camus 142
運(yùn)行Camus 143
Gobblin 144
Gobblin架構(gòu) 144
Kafka Connect 146
Flume 147
總 結(jié) 150
第8章 使用Kafka構(gòu)建ETL管道 151
在ETL管道中使用Kafka 151
介紹Kafka Connect 153
深入研究Kafka Connect 154
介紹使用Kafka Connect示例 155
Kafka Connect常見(jiàn)的用例 159
總 結(jié) 160
第9章 使用Kafka Streams 構(gòu)建流應(yīng)用程序 161
介紹Kafka Streams 161
在流處理中使用Kafka 162
Kafka Stream輕量級(jí)流處理庫(kù) 163
Kafka Stream架構(gòu) 164
集成框架的優(yōu)勢(shì) 166
理解Tables和Streams 167
Maven依賴 167
Kafka Stream單詞計(jì)數(shù) 168
KTable 170
Kafka Stream使用案例 171
Kafka Streams的Maven依賴 171
reader屬性 172
IP記錄生產(chǎn)者 173
IP查詢服務(wù) 176
欺詐檢測(cè)應(yīng)用程序 177
總 結(jié) 179
第10章 Kafka集群部署 180
Kafka集群的內(nèi)部結(jié)構(gòu) 180
Zookeeper角色 181
復(fù) 制 182
元數(shù)據(jù)(Metadata)請(qǐng)求處理 184
生產(chǎn)者(Producer)請(qǐng)求處理 184
消費(fèi)者(Consumer)請(qǐng)求處理 185
容量規(guī)劃 186
容量規(guī)劃的目標(biāo) 186
復(fù)制因子 186
內(nèi) 存 187
硬盤驅(qū)動(dòng)器 187
網(wǎng) 絡(luò) 188
CPU 188
Kafka單集群部署 189
Kafka多集群部署 190
退役brokers 192
數(shù)據(jù)遷移 192
總 結(jié) 193
第11章 在大數(shù)據(jù)應(yīng)用中使用Kafka 194
管理Kafka的高容量 195
適當(dāng)?shù)挠布x擇 195
生產(chǎn)者讀取和消費(fèi)者寫入的選擇 197
Kafka消息傳遞語(yǔ)義 198
至少一次傳遞 199
最多一次傳遞 202
正好一次傳遞 203
大數(shù)據(jù)和Kafka常見(jiàn)的使用模式 204
Kafka和數(shù)據(jù)治理 206
報(bào)警和監(jiān)控 207
有用的Kafka指標(biāo) 208
Kafka生產(chǎn)者指標(biāo) 208
Kafka broker指標(biāo) 209
Kafka消費(fèi)者指標(biāo) 209
總 結(jié) 210
第12章 Kafka安全 211
Kafka安全的概述 211
SSL有線加密 212
Kafka啟用SSL的步驟 213
為Kafka broker配置SSL 214
為Kafka客戶端配置SSL 214
Kerberos SASL認(rèn)證 215
在Kafka中啟用SASL/GSSAPI的步驟 217
為Kafka broker配置SASL 217
為Kafka客戶端配置SASL―生產(chǎn)者和消費(fèi)者 219
理解ACL和授權(quán) 220
常見(jiàn)的ACL操作 221
ACLs列表 222
Zookeeper身份驗(yàn)證 223
Apache Ranger授權(quán) 224
為Ranger添加Kafka服務(wù) 224
添加策略(policies) 225
最佳實(shí)踐 227
總 結(jié) 229
第13章 流應(yīng)用程序設(shè)計(jì)的考慮 230
延遲和吞吐量 231
數(shù)據(jù)和狀態(tài)的持久性 232
數(shù)據(jù)源 232
外部數(shù)據(jù)查詢 233
數(shù)據(jù)格式 233
數(shù)據(jù)序列化 234
并行度 234
無(wú)序的事件 235
消息處理語(yǔ)義 235
總 結(jié) 236