《Kafka入門(mén)與實(shí)踐》以Kafka 0.10.1.1版本以基礎(chǔ),對(duì)Kafka的基本組件的實(shí)現(xiàn)細(xì)節(jié)及其基本應(yīng)用進(jìn)行了詳細(xì)介紹,同時(shí),通過(guò)對(duì)Kafka與當(dāng)前大數(shù)據(jù)主流框架整合應(yīng)用案例的講解,進(jìn)一步展現(xiàn)了Kafka在實(shí)際業(yè)務(wù)中的作用和地位。本書(shū)共10章,按照從抽象到具體、從點(diǎn)到線(xiàn)再到面的學(xué)習(xí)思維模式,由淺入深,理論與實(shí)踐相結(jié)合,對(duì)Kafka進(jìn)行了分析講解。
《Kafka入門(mén)與實(shí)踐》中的大量實(shí)例來(lái)源于作者在實(shí)際工作中的實(shí)踐,具有現(xiàn)實(shí)指導(dǎo)意義。相信讀者閱讀完本書(shū)之后,能夠全面掌握Kafka的基本實(shí)現(xiàn)原理及其基本操作,能夠根據(jù)書(shū)中的案例舉一反三,解決實(shí)際工作和學(xué)習(xí)中的問(wèn)題。此外,在閱讀本書(shū)時(shí),讀者可以根據(jù)本書(shū)對(duì)Kafka理論的分析,再結(jié)合Kafka源碼進(jìn)行定位學(xué)習(xí),了解Kafka的設(shè)計(jì)和思想以及更多的編碼技巧。
《Kafka入門(mén)與實(shí)踐》適合應(yīng)用Kafka的專(zhuān)業(yè)技術(shù)人員閱讀,包括但不限于大數(shù)據(jù)相關(guān)應(yīng)用的開(kāi)發(fā)者、運(yùn)維者和愛(ài)好者,也適合高等院校、培訓(xùn)結(jié)構(gòu)相關(guān)專(zhuān)業(yè)的師生使用。
Kafka*初是由LinkedIn公司開(kāi)發(fā)的消息系統(tǒng),現(xiàn)在已成為Apache的開(kāi)源項(xiàng)目。早期版本的Kafka主要是作為一個(gè)分布式、可分區(qū)和具有副本的消息系統(tǒng),隨著版本的不斷迭代,在0.10.x版本之后Kafka已成為一個(gè)分布式流數(shù)據(jù)處理平臺(tái),特別是Kafka Streams的出現(xiàn),使得Kafka對(duì)流數(shù)據(jù)處理變得更加簡(jiǎn)單。
Kafka發(fā)展至今已具備很多特性,如分布式、高吞吐量、低延遲、高水平擴(kuò)展性、高容錯(cuò)性等,也正是由于Kafka具備這些特性,使Kafka在大數(shù)據(jù)處理、日志收集、實(shí)時(shí)監(jiān)控、離線(xiàn)統(tǒng)計(jì)分析等應(yīng)用場(chǎng)景都被廣泛使用。
本書(shū)內(nèi)容按照從抽象到具體、從點(diǎn)到線(xiàn)再到面的學(xué)習(xí)思維模式進(jìn)行編排,由淺入深、理論與實(shí)踐相結(jié)合地對(duì)Kafka進(jìn)行了講解和分析。剖析Kafka實(shí)現(xiàn)原理時(shí),Kafka核心組件各成一節(jié);講解Kafka基本操作及應(yīng)用實(shí)踐時(shí),從簡(jiǎn)單操作拓展到高級(jí)應(yīng)用。全書(shū)的各章之間沒(méi)有很強(qiáng)的依賴(lài)關(guān)系,讀者可以從其中任何一章開(kāi)始閱讀。
本書(shū)雖適合作為入門(mén)書(shū)籍,但其內(nèi)容豐富又不失深度,既深入剖析了Kafka核心原理,又側(cè)重實(shí)際操作實(shí)戰(zhàn)。閱讀本書(shū)讀者不僅可以掌握如何應(yīng)用Kafka,更重要的是還可以了解Kafka性能優(yōu)化和Kafka相關(guān)功能改造方面的方法和理論。
本書(shū)是基于Kafka的0.10.1.1版本編寫(xiě)的。
牟大恩,武漢大學(xué)碩士,曾先后在網(wǎng)易杭州研究院、掌門(mén)科技、優(yōu)酷土豆集團(tuán)擔(dān)任高級(jí)開(kāi)發(fā)工程師和資深開(kāi)發(fā)工程師職務(wù),目前就職于海通證券總部。有多年的Java開(kāi)發(fā)及系統(tǒng)設(shè)計(jì)經(jīng)驗(yàn),專(zhuān)注于互聯(lián)網(wǎng)金融及大數(shù)據(jù)應(yīng)用相關(guān)領(lǐng)域。
第1章 Kafka簡(jiǎn)介1
1.1 Kafka背景1
1.2 Kafka基本結(jié)構(gòu)2
1.3 Kafka基本概念2
1.4 Kafka設(shè)計(jì)概述6
1.4.1 Kafka設(shè)計(jì)動(dòng)機(jī)6
1.4.2 Kafka特性6
1.4.3 Kafka應(yīng)用場(chǎng)景8
1.5 本書(shū)導(dǎo)讀9
1.6 小結(jié)9
第2章 Kafka安裝配置11
2.1 基礎(chǔ)環(huán)境配置11
2.1.1 JDK安裝配置11
2.1.2 SSH安裝配置13
2.1.3 ZooKeeper環(huán)境15
2.2 Kafka單機(jī)環(huán)境部署18
2.2.1 Windows環(huán)境安裝Kafka19
2.2.2 Linux環(huán)境安裝Kafka19
2.3 Kafka偽分布式環(huán)境部署21
2.4 Kafka集群環(huán)境部署22
2.5 Kafka Manager安裝22
2.6 Kafka源碼編譯25
2.6.1 Scala安裝配置25
2.6.2 Gradle安裝配置26
2.6.3 Kafka源碼編譯26
2.6.4 Kafka導(dǎo)入Eclipse30
2.7 小結(jié)31
第3章 Kafka核心組件33
3.1 延遲操作組件33
3.1.1 DelayedOperation33
3.1.2 DelayedOperationPurgatory35
3.1.3 DelayedProduce36
3.1.4 DelayedFetch38
3.1.5 DelayedJoin38
3.1.6 DelayedHeartbeat39
3.1.7 DelayedCreateTopics40
3.2 控制器40
3.2.1 控制器初始化41
3.2.2 控制器選舉過(guò)程46
3.2.3 故障轉(zhuǎn)移48
3.2.4 代理上線(xiàn)與下線(xiàn)49
3.2.5 主題管理51
3.2.6 分區(qū)管理54
3.3 協(xié)調(diào)器58
3.3.1 消費(fèi)者協(xié)調(diào)器58
3.3.2 組協(xié)調(diào)器60
3.4 網(wǎng)絡(luò)通信服務(wù)64
3.4.1 Acceptor65
3.4.2 Processor66
3.4.3 RequestChannel68
3.4.4 SocketServer啟動(dòng)過(guò)程69
3.5 日志管理器70
3.5.1 Kafka日志結(jié)構(gòu)70
3.5.2 日志管理器啟動(dòng)過(guò)程77
3.5.3 日志加載及恢復(fù)79
3.5.4 日志清理80
3.6 副本管理器84
3.6.1 分區(qū)86
3.6.2 副本88
3.6.3 副本管理器啟動(dòng)過(guò)程89
3.6.4 副本過(guò)期檢查90
3.6.5 追加消息92
3.6.6 拉取消息95
3.6.7 副本同步過(guò)程97
3.6.8 副本角色轉(zhuǎn)換99
3.6.9 關(guān)閉副本101
3.7 Handler103
3.8 動(dòng)態(tài)配置管理器104
3.9 代理健康檢測(cè)106
3.10 Kafka內(nèi)部監(jiān)控107
3.11 小結(jié)110
第4章 Kafka核心流程分析111
4.1 KafkaServer啟動(dòng)流程分析111
4.2 創(chuàng)建主題流程分析115
4.2.1 客戶(hù)端創(chuàng)建主題115
4.2.2 分區(qū)副本分配117
4.3 生產(chǎn)者121
4.3.1 Eclipse運(yùn)行生產(chǎn)者源碼121
4.3.2 生產(chǎn)者重要配置說(shuō)明123
4.3.3 OldProducer執(zhí)行流程124
4.3.4 KafkaProducer實(shí)現(xiàn)原理127
4.4 消費(fèi)者140
4.4.1 舊版消費(fèi)者140
4.4.2 KafkaConsumer初始化140
4.4.3 消費(fèi)訂閱144
4.4.4 消費(fèi)消息145
4.4.5 消費(fèi)偏移量提交149
4.4.6 心跳探測(cè)150
4.4.7 分區(qū)數(shù)與消費(fèi)者線(xiàn)程的關(guān)系151
4.4.8 消費(fèi)者平衡過(guò)程153
4.5 小結(jié)154
第5章 Kafka基本操作實(shí)戰(zhàn)155
5.1 KafkaServer管理155
5.1.1 啟動(dòng)Kafka單個(gè)節(jié)點(diǎn)155
5.1.2 啟動(dòng)Kafka集群159
5.1.3 關(guān)閉Kafka單個(gè)節(jié)點(diǎn)160
5.1.4 關(guān)閉Kafka集群161
5.2 主題管理162
5.2.1 創(chuàng)建主題162
5.2.2 刪除主題164
5.2.3 查看主題165
5.2.4 修改主題166
5.3 生產(chǎn)者基本操作168
5.3.1 啟動(dòng)生產(chǎn)者168
5.3.2 創(chuàng)建主題169
5.3.3 查看消息170
5.3.4 生產(chǎn)者性能測(cè)試工具170
5.4 消費(fèi)者基本操作174
5.4.1 消費(fèi)消息174
5.4.2 單播與多播179
5.4.3 查看消費(fèi)偏移量181
5.4.4 消費(fèi)者性能測(cè)試工具183
5.5 配置管理183
5.5.1 主題級(jí)別配置184
5.5.2 代理級(jí)別設(shè)置185
5.5.3 客戶(hù)端/用戶(hù)級(jí)別配置187
5.6 分區(qū)操作188
5.6.1 分區(qū)Leader平衡188
5.6.2 分區(qū)遷移190
5.6.3 增加分區(qū)194
5.6.4 增加副本195
5.7 連接器基本操作198
5.7.1 獨(dú)立模式198
5.7.2 REST風(fēng)格API應(yīng)用201
5.7.3 分布式模式204
5.8 Kafka Manager應(yīng)用209
5.9 Kafka安全機(jī)制211
5.9.1 利用SASL/PLAIN進(jìn)行身份認(rèn)證212
5.9.2 權(quán)限控制215
5.10 鏡像操作218
5.11 小結(jié)219
第6章 Kafka API編程實(shí)戰(zhàn)221
6.1 主題管理222
6.1.1 創(chuàng)建主題222
6.1.2 修改主題級(jí)別配置223
6.1.3 增加分區(qū)224
6.1.4 分區(qū)副本重分配224
6.1.5 刪除主題225
6.2 生產(chǎn)者API應(yīng)用225
6.2.1 單線(xiàn)程生產(chǎn)者226
6.2.2 多線(xiàn)程生產(chǎn)者231
6.3 消費(fèi)者API應(yīng)用233
6.3.1 舊版消費(fèi)者API應(yīng)用233
6.3.2 新版消費(fèi)者API應(yīng)用239
6.4 自定義組件實(shí)現(xiàn)247
6.4.1 分區(qū)器247
6.4.2 序列化與反序列化249
6.5 Spring與Kafka整合應(yīng)用257
6.5.1 生產(chǎn)者259
6.5.2 消費(fèi)者263
6.6 小結(jié)266
第7章 Kafka Streams267
7.1 Kafka Streams簡(jiǎn)介267
7.2 Kafka Streams基本概念268
7.2.1 流268
7.2.2 流處理器268
7.2.3 處理器拓?fù)?68
7.2.4 時(shí)間269
7.2.5 狀態(tài)270
7.2.6 KStream和KTable270
7.2.7 窗口271
7.3 Kafka Streams API介紹272
7.3.1 KStream與KTable272
7.3.2 窗口操作274
7.3.3 連接操作275
7.3.4 變換操作277
7.3.5 聚合操作279
7.4 接口惡意訪(fǎng)問(wèn)自動(dòng)檢測(cè)281
7.4.1 應(yīng)用描述281
7.4.2 具體實(shí)現(xiàn)282
7.5 小結(jié)285
第8章 Kafka數(shù)據(jù)采集應(yīng)用287
8.1 Log4j集成Kafka應(yīng)用287
8.1.1 應(yīng)用描述287
8.1.2 具體實(shí)現(xiàn)287
8.2 Kafka與Flume整合應(yīng)用289
8.2.1 Flume簡(jiǎn)介290
8.2.2 Flume與Kafka比較291
8.2.3 Flume的安裝配置291
8.2.4 Flume采集日志寫(xiě)入Kafka293
8.3 Kafka與Flume和HDFS整合應(yīng)用294
8.3.1 Hadoop安裝配置295
8.3.2 Flume采集Kafka消息寫(xiě)入HDFS298
8.4 小結(jié)301
第9章 Kafka與ELK整合應(yīng)用303
9.1 ELK環(huán)境搭建304
9.1.1 Elasticsearch安裝配置304
9.1.2 Logstash安裝配置307
9.1.3 Kibana安裝配置308
9.2 Kafka與Logstash整合309
9.2.1 Logstash收集日志到Kafka309
9.2.2 Logstash從Kafka消費(fèi)日志310
9.3 日志采集分析系統(tǒng)312
9.3.1 Flume采集日志配置312
9.3.2 Logstash拉取日志配置313
9.3.3 Kibana日志展示314
9.4 服務(wù)器性能監(jiān)控系統(tǒng)315
9.4.1 Metricbeat安裝316
9.4.2 采集信息存儲(chǔ)到Elasticsearch316
9.4.3 加載beats-dashboards318
9.4.4 服務(wù)器性能監(jiān)控系統(tǒng)具體實(shí)現(xiàn)318
9.5 小結(jié)321
第10章 Kafka與Spark整合應(yīng)用323
10.1 Spark簡(jiǎn)介323
10.2 Spark基本操作324
10.2.1 Spark安裝325
10.2.2 Spark shell應(yīng)用326
10.2.3 spark-submit提交作業(yè)327
10.3 Spark在智能投顧領(lǐng)域應(yīng)用328
10.3.1 應(yīng)用描述328
10.3.2 具體實(shí)現(xiàn)329
10.4 熱搜詞統(tǒng)計(jì)334
10.4.1 應(yīng)用描述334
10.4.2 具體實(shí)現(xiàn)335
10.5 小結(jié)340