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