Flink技術(shù)內(nèi)幕:架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理
定 價(jià):99 元
叢書名:大數(shù)據(jù)技術(shù)叢書
- 作者:羅江宇,趙士杰,李涵淼,閔文俊
- 出版時(shí)間:2021/12/1
- ISBN:9787111696292
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP274
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
內(nèi)容簡介
這是一部從源代碼角度出發(fā),通過分析Flink的各個(gè)功能模塊的實(shí)現(xiàn)來剖析Flink的架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)原理的著作。它將能指導(dǎo)讀者更好地對Flink進(jìn)行性能調(diào)優(yōu)、可用性保障、效能優(yōu)化和二次開發(fā)。
四位作者都是非常資深的Flink專家,部分作者是Flink源代碼的維護(hù)者和改造者,本書總結(jié)了他們在阿里巴巴、螞蟻集團(tuán)、滴滴等企業(yè)的大規(guī)模Flink實(shí)踐經(jīng)驗(yàn)。
全書共11章,主要內(nèi)容如下。
第1章 閱讀Flink源代碼前的準(zhǔn)備
主要介紹了Flink源代碼的獲取、編譯、調(diào)試,以及它的目錄結(jié)構(gòu)、設(shè)計(jì)理念和基本架構(gòu)。此外,還分析了Flink與Hadoop MapReduce、Spark在設(shè)計(jì)上的差異。
第2~8章 Flink功能模塊源代碼和架構(gòu)解析
從源碼角度分析了Flink的編程模型與API、運(yùn)行時(shí)組件與通信、狀態(tài)管理與容錯(cuò)、任務(wù)提交與執(zhí)行、Flink網(wǎng)絡(luò)棧、Flink Connector、部署模式等功能模塊的原理。力求讓讀者深入理解Flink的原理,而不只是跟著本書讀一遍Flink源代碼。原理和思想是不局限于某一個(gè)框架和技術(shù),了解了Flink的原理和思想,可以將其擴(kuò)展到其他框架和技術(shù)上。
第9~10章 Flink Table、SQL與Flink CEP
編程方式逐漸從原先基于Map-Reduce的任務(wù)模式向SQL化演進(jìn),SQL意味著標(biāo)準(zhǔn)和效率。這兩章重點(diǎn)講解了StreamTableEnvironment的實(shí)現(xiàn)過程、SQL的解析過程、Table Connector以及Flink CEP的內(nèi)部實(shí)現(xiàn)原理。
第11章 Flink監(jiān)控
主要講解了Flink的監(jiān)控指標(biāo)、常用系統(tǒng)指標(biāo)和監(jiān)控體系的建設(shè),以及常用的定位手段。
作者背景資深:4位作者均是Flink的早期實(shí)踐者和布道者,不僅參與了國內(nèi)早期的Flink項(xiàng)目,而且參與Flink源碼的維護(hù)和改造。大廠經(jīng)驗(yàn)總結(jié):作者在阿里巴巴、螞蟻集團(tuán)、滴滴等企業(yè)參與和主導(dǎo)了多個(gè)Flink項(xiàng)目從0到1的過程,本書是他們在這些企業(yè)大規(guī)模應(yīng)用Flink的經(jīng)驗(yàn)總結(jié)。源碼全面剖析:本書從源碼角度深入剖析了Flink各功能模塊的架構(gòu)與實(shí)現(xiàn),能指導(dǎo)讀者更好地進(jìn)行性能調(diào)優(yōu)、可用性保障、效能優(yōu)化、二次開發(fā)
為什么要寫本書
近些年來,流計(jì)算技術(shù)發(fā)展迅速,被廣泛應(yīng)用于數(shù)據(jù)ETL、數(shù)據(jù)BI、實(shí)時(shí)數(shù)據(jù)倉庫建設(shè)和AI等方面。Flink作為流計(jì)算領(lǐng)域的一顆璀璨的明星,自問世以來發(fā)展迅猛,其技術(shù)生態(tài)圈也日益壯大,現(xiàn)已成為Apache開源項(xiàng)目中活躍的項(xiàng)目之一。很多企業(yè)選擇用Flink來構(gòu)建其流計(jì)算體系或流批一體體系,使用on YARN或on Kubernetes部署模式來進(jìn)行大規(guī)模生產(chǎn)。
轉(zhuǎn)眼間,我從事Flink研發(fā)工作已經(jīng)4年,其間我對Flink 的1.2、1.3、1.5、1 .8、1.9、1.11 和1.13版本源代碼進(jìn)行維護(hù)和改造,提供Flink 大規(guī)模集群生產(chǎn)支持,并在公司內(nèi)提供業(yè)務(wù)解決方案。在為業(yè)務(wù)方提供支持的過程中,我逐漸萌生寫一本剖析Flink內(nèi)部機(jī)制的書的想法,原因有二。
其一,隨著流計(jì)算的流行和應(yīng)用于大規(guī)模生產(chǎn),公司對Flink的性能、可用性和效能等方面的要求更加迫切,因而更加需要流計(jì)算方面的人才,尤其是擁有Flink性能調(diào)優(yōu)、可用性和效能等方面經(jīng)驗(yàn)的人才。而單純查看官方文檔,對Flink機(jī)制的認(rèn)識只能流于黑盒形式。只有深入源代碼才能深刻理解Flink 的內(nèi)部機(jī)制,才能更好地進(jìn)行性能調(diào)優(yōu),做好可用性保障和優(yōu)化,以及做好效能方面的優(yōu)化。
其二,市場上缺少深入剖析Flink源代碼和設(shè)計(jì)的圖書。我希望借助自己多年從事大規(guī)模生產(chǎn)以及進(jìn)行多個(gè)Flink 版本維護(hù)與改造的經(jīng)驗(yàn),對Flink 的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行深入剖析,幫助讀者更好地了解Flink源代碼與機(jī)制。
通過了解源代碼,讀者能有以下收獲:
編寫出更健壯的流計(jì)算代碼;
更好地對流計(jì)算作業(yè)進(jìn)行調(diào)優(yōu),使得作業(yè)性能更高;
更好地維護(hù)Flink引擎,并對Flink引擎進(jìn)行二次開發(fā)。
讀者對象
本書適合以下幾類人員閱讀:
流計(jì)算開發(fā)人員、大數(shù)據(jù)開發(fā)人員;
大數(shù)據(jù)架構(gòu)人員;
對Flink計(jì)算引擎底層感興趣的相關(guān)人員。
本書特色
基于使用方式及其背后的原理、原理背后的設(shè)計(jì)及源代碼實(shí)現(xiàn)來剖析Flink內(nèi)部機(jī)制,由淺入深。
盡量用圖來展示原理和機(jī)制,以便于讀者理解。
盡可能結(jié)合實(shí)際生產(chǎn)分析Flink 內(nèi)部機(jī)制,對讀者的實(shí)際生產(chǎn)具有指導(dǎo)意義。
講解的設(shè)計(jì)和實(shí)現(xiàn)原理有助于讀者提升架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)能力。
本書結(jié)構(gòu)與內(nèi)容
本書基于Flink 1.9版本的源代碼來解析Flink。全書共11章,主要內(nèi)容如下。
第1章 閱讀Flink源代碼前的準(zhǔn)備
主要介紹Flink源代碼閱讀環(huán)境準(zhǔn)備以及Flink的設(shè)計(jì)理念和基本架構(gòu),包括Flink源代碼的導(dǎo)入流程和調(diào)試方式,F(xiàn)link與Hadoop MapReduce、Spark的設(shè)計(jì)差異,以及Flink的分層架構(gòu)和運(yùn)行時(shí)架構(gòu)。
第2章 編程模型與API
主要介紹Flink DataStream的算子的使用和實(shí)現(xiàn)原理。首先講解DataStream底層的轉(zhuǎn)換,接著介紹常用算子(如FlatMap、Join、Aggregation、Union),后解析窗口的設(shè)計(jì)與實(shí)現(xiàn)。
第3章 運(yùn)行時(shí)組件與通信
深入剖析運(yùn)行時(shí)組件、組件間通信及運(yùn)行時(shí)組件的高可用。首先介紹運(yùn)行時(shí)組件REST、Dispatcher、ResourceManager、JobMaster和TaskExecutor,接著介紹運(yùn)行時(shí)組件間通信的框架Akka,并以Slot申請為例講解運(yùn)行時(shí)組件之間的通信,后介紹運(yùn)行時(shí)組件高可用的功能、存在的問題及其解決方案。
第4章 狀態(tài)管理與容錯(cuò)
從狀態(tài)、檢查點(diǎn)、狀態(tài)后端三個(gè)概念入手,對Flink狀態(tài)管理和容錯(cuò)的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行深度剖析。
第5章 任務(wù)提交與執(zhí)行
主要介紹Flink任務(wù)提交的整個(gè)流程,從客戶端、JobManager和TaskManager端對應(yīng)任務(wù)各個(gè)階段的轉(zhuǎn)換入手進(jìn)行深入的梳理與分析。
第6章 Flink網(wǎng)絡(luò)棧
首先介紹Flink的內(nèi)存管理機(jī)制,然后講解什么是Flink網(wǎng)絡(luò)棧以及網(wǎng)絡(luò)傳輸流程,其中涵蓋Flink的兩種背壓實(shí)現(xiàn)方式,后介紹流批一體的shuffle架構(gòu)的設(shè)計(jì)和實(shí)現(xiàn)。
第7章 Flink Connector的設(shè)計(jì)與實(shí)現(xiàn)
首先以Kafka Connector為切入點(diǎn)介紹Connector模塊設(shè)計(jì)時(shí)需要考慮的消費(fèi)、分區(qū)管理、一致性語義保障等關(guān)鍵問題,然后以HBase為例介紹SQL/Table Connector的使用和實(shí)現(xiàn)原理。
第8章 部署模式
主要介紹Flink中常用的三種部署模式:Local模式、Standalone模式和第三方部署模式。首先介紹用于本地調(diào)試的Local模式、Standalone模式中Session模式的構(gòu)建與實(shí)現(xiàn),然后介紹Flink on YARN的Session模式和Per-Job模式的設(shè)計(jì)與實(shí)現(xiàn),后介紹Flink on Kubernetes基于YAML的實(shí)現(xiàn)。
第9章 Flink Table與SQL
主要介紹Flink Table與SQL中StreamTableEnvironment的實(shí)現(xiàn)過程、SQL的解析過程、Table Connector以及UDF和內(nèi)置算子的實(shí)現(xiàn)。
第10章 Flink CEP原理解析
主要介紹Flink CEP的基本概念和語法,如何使用Flink CEP編寫作業(yè),以及 Flink CEP內(nèi)部基于NFA的實(shí)現(xiàn)原理。
第11章 Flink監(jiān)控
主要介紹Flink監(jiān)控指標(biāo)、常用系統(tǒng)指標(biāo)和監(jiān)控體系的建設(shè),以及常用的定位手段。
勘誤與支持
由于作者的水平有限,加之寫作時(shí)間倉促,書中難免存在不妥之處。為此,我們在GitHub上創(chuàng)建了本書專屬工程(https://github.com/streaming-olap/deep-in-flink-book)來支持在線反饋。大家如有任何意見或建議,歡迎在該工程下創(chuàng)建issue,我們會
作者簡介
羅江宇
Flink技術(shù)專家,先后就職于新浪微博、滴滴和某大型電商公司。先后主導(dǎo)或參與了多家公司的Flink實(shí)時(shí)計(jì)算服務(wù)的構(gòu)建、對超大規(guī)模集群的維護(hù)以及Flink引擎的改造。擁有豐富的實(shí)時(shí)計(jì)算實(shí)戰(zhàn)經(jīng)驗(yàn),目前專注于Kubernetes調(diào)度、Flink SQL及Flink流批一體化方向。
趙士杰
資深大數(shù)據(jù)技術(shù)專家,曾就職于滴滴、阿里巴巴等一線互聯(lián)網(wǎng)公司。從0到1深度參與了滴滴的大數(shù)據(jù)建設(shè),擁有非常豐富的大數(shù)據(jù)平臺一線建設(shè)經(jīng)驗(yàn),對于大數(shù)據(jù)領(lǐng)域的計(jì)算和存儲引擎也有深入研究。
李涵淼
大數(shù)據(jù)研發(fā)專家,曾任滴滴大數(shù)據(jù)開發(fā)工程師。從事大數(shù)據(jù)領(lǐng)域工作多年,參與過多家公司流計(jì)算平臺的設(shè)計(jì)與研發(fā),目前專注于批流一體、OLAP技術(shù)方向的研究與應(yīng)用。
閔文俊
螞蟻集團(tuán)技術(shù)專家、開源大數(shù)據(jù)社區(qū)愛好者、Flink Contributor,在實(shí)時(shí)計(jì)算領(lǐng)域工作多年,深度參與了滴滴、螞蟻集團(tuán)的實(shí)時(shí)計(jì)算平臺建設(shè)。
前 言
第1章 閱讀Flink源代碼前的準(zhǔn)備 1
1.1 環(huán)境準(zhǔn)備 1
1.2 獲取、編譯和調(diào)試Flink的源代碼 4
1.2.1 獲取與導(dǎo)入Flink源代碼 4
1.2.2 編譯與調(diào)試Flink源代碼 6
1.3 Flink源代碼的目錄結(jié)構(gòu) 9
1.4 Flink設(shè)計(jì)理念與基本架構(gòu) 11
1.4.1 Flink與主流計(jì)算引擎對比 11
1.4.2 Flink基本架構(gòu) 14
1.5 本章小結(jié) 17
第2章 編程模型與API 18
2.1 DataStream 18
2.2 算子 21
2.3 窗口 28
2.3.1 窗口的基本概念 28
2.3.2 窗口的執(zhí)行流程 30
2.3.3 窗口分配器 32
2.3.4 觸發(fā)器 37
2.3.5 窗口函數(shù) 41
2.4 本章小結(jié) 43
第3章 運(yùn)行時(shí)組件與通信 44
3.1 運(yùn)行時(shí)組件 44
3.1.1 REST 45
3.1.2 Dispatcher 54
3.1.3 ResourceManager 61
3.1.4 JobMaster 75
3.1.5 TaskExecutor 85
3.2 組件間通信 95
3.2.1 Akka與Actor模型 95
3.2.2 組件間通信實(shí)現(xiàn) 99
3.3 運(yùn)行時(shí)組件的高可用 117
3.3.1 Master節(jié)點(diǎn)上組件的高可用 117
3.3.2 現(xiàn)有運(yùn)行時(shí)組件高可用存在的問題及其解決方案 126
3.4 本章小結(jié) 128
第4章 狀態(tài)管理與容錯(cuò) 129
4.1 狀態(tài) 129
4.1.1 狀態(tài)的原理與實(shí)現(xiàn) 129
4.1.2 狀態(tài)生存時(shí)間的原理與實(shí)現(xiàn) 134
4.2 檢查點(diǎn) 137
4.2.1 檢查點(diǎn)機(jī)制原理 137
4.2.2 檢查點(diǎn)執(zhí)行過程 137
4.2.3 任務(wù)容錯(cuò) 140
4.3 狀態(tài)后端 143
4.4 本章小結(jié) 148
第5章 任務(wù)提交與執(zhí)行 149
5.1 任務(wù)提交整體流程 149
5.2 DAG轉(zhuǎn)換 152
5.2.1 DAG的4層轉(zhuǎn)換 152
5.2.2 WordCount轉(zhuǎn)換過程 152
5.3 Slot分配 160
5.3.1 相關(guān)概念和實(shí)現(xiàn)類 160
5.3.2 Slot申請流程 162
5.3.3 任務(wù)部署 168
5.4 任務(wù)執(zhí)行機(jī)制 170
5.4.1 任務(wù)執(zhí)行過程 170
5.4.2 MailBox線程模型 174
5.5 本章小結(jié) 177
第6章 Flink網(wǎng)絡(luò)棧 178
6.1 內(nèi)存管理 178
6.2 網(wǎng)絡(luò)傳輸 182
6.2.1 什么是Flink網(wǎng)絡(luò)棧 182
6.2.2 非流控模型的網(wǎng)絡(luò)傳輸流程 184
6.2.3 流控模型的網(wǎng)絡(luò)傳輸流程 197
6.3 流批一體的shuffle架構(gòu) 199
6.3.1 生命周期管理 199
6.3.2 數(shù)據(jù)shuffle 207
6.4 本章小結(jié) 208
第7章 Flink Connector的設(shè)計(jì)與實(shí)現(xiàn) 209
7.1 Kafka Connector實(shí)現(xiàn)原理 209
7.1.1 Kafka Source Connector實(shí)現(xiàn) 209
7.1.2 Kafka Sink Connector 實(shí)現(xiàn) 216
7.2 HBase Table Connector 實(shí)現(xiàn)原理 220
7.2.1 HBase Source Connector和Sink Connector的工廠實(shí)現(xiàn) 221
7.2.2 HBase維表實(shí)現(xiàn) 222
7.3 本章小結(jié) 224
第8章 部署模式 225
8.1 Local部署 225
8.2 Standalone部署 228
8.3 Flink on YARN模式 240
8.3.1 YARN基本架構(gòu) 240
8.3.2 Flink on YARN模式介紹 241
8.3.3 Flink on YARN啟動過程 243
8.4 Flinkon Kubernetes模式 260
8.5 本章小結(jié) 265
第9章 Flink Table與SQL 266
9.1 StreamTableEnvironment類介紹 266
9.1.1 StreamExecution-Environment類 267
9.1.2 EnvironmentSettings類 267
9.1.3 TableConfig類 268
9.1.4 StreamTableEnvironment的創(chuàng)建過程 269
9.2 SQL解析過程 270
9.2.1 SQL解析 270
9.2.2 SQL優(yōu)化 277
9.2.3 RelNode轉(zhuǎn)換 279
9.3 Table Connector 281
9.3.1 TableSource 282
9.3.2 TableSink 286
9.3.3 SPI機(jī)制在Table Connector中的應(yīng)用 288
9.4 UDF與內(nèi)置算子 292
9.4.1 UDF 292
9.4.2 內(nèi)置算子 294
9.5 本章小結(jié) 297
第10章 Flink CEP 原理解析 298
10.1 CEP的基本概念 298
10.1.1 什么是Flink CEP 298
10.1.2 Pattern 298
10.1.3 量詞 300
10.1.4 條件 301
10.1.5 連接 302
10.1.6 Flink CEP作業(yè)編寫舉例 302
10.2 CEP內(nèi)部實(shí)現(xiàn)原理 304
10.2.1 NFA簡介 305
10.2.2 匹配過程 305
10.2.3 CEP狀態(tài)存儲 310
10.2.4 CEP和SQL結(jié)合 313
10.3 本章小結(jié) 315
第11章 Flink監(jiān)控 316
11.1 監(jiān)控指標(biāo) 316
11.1.1 指標(biāo)類型 316
11.1.2 系統(tǒng)指標(biāo)及自定義指標(biāo) 318
11.1.3 指標(biāo)的使用 319
11.2 常用系統(tǒng)指標(biāo) 322
11.3 監(jiān)控體系建設(shè) 324
11.3.1 指標(biāo)監(jiān)控及展示 324
11.3.2 日志分析處理 326
11.3.3 定位手段 326
11.4 本章小結(jié) 327