Flink設計與實現(xiàn):核心原理與源碼解析
定 價:129 元
叢書名:大數(shù)據(jù)技術叢書
- 作者:張利兵
- 出版時間:2021/8/1
- ISBN:9787111687832
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP274
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
內容簡介
這是一本從源代碼角度剖析Flink設計思想、架構原理以及各功能模塊的底層實現(xiàn)原理的著作。
作者是Flink領域的資深技術專家和架構師,對Flink的源代碼進行了深入分析和解讀,同時融入了自己豐富的工程實踐經(jīng)驗,既能讓理解Flink的設計與實現(xiàn)原理,又能為他們解決性能優(yōu)化等實際應用問題提供源碼級別的指導。源碼大多艱澀難懂,為了降低讀者的學習門檻,本書提供了大量架構設計圖、UML圖和代碼注釋。
通過閱讀本書,你將:
?徹底掌握Flink源碼設計與實現(xiàn)
?深度掌握Flink作業(yè)運行流程
?深入了解Flink部署模式實現(xiàn)原理
?深度掌握Flink Runtime設計和實現(xiàn)原理
?庖丁解牛Flink網(wǎng)絡通信原理
?探索Flink內存管理實現(xiàn)
?深入了解Flink接口設計
?從Flink源碼中學習架構設計經(jīng)驗
(1)作者資深:Apache Flink源碼貢獻者,多年Flink開發(fā)經(jīng)驗,第四范式AI數(shù)據(jù)平臺架構師。(2)深入原理:從源代碼角度剖析Flink設計思想、架構原理以及各功能模塊的底層實現(xiàn)原理。(3)化繁為簡:用大量架構設計圖、UML圖和代碼注釋降低讀者閱讀和理解Flink源代碼的門檻。(4)專家好評:前騰訊、360、趣頭條、明源云等企業(yè)的大數(shù)據(jù)專家一致好評和推薦。
為什么要寫本書
流計算從出現(xiàn)到普及,經(jīng)歷了非常多的變化從早期Apache Storm等技術的落地和使用,到現(xiàn)在越來越多的公司選擇使用Apache Flink作為流處理核心技術。Flink以其強大的批流一體處理能力以及低延遲、高吞吐等特性,正在吸引著越來越多的公司和用戶加入Flink社區(qū)。和大多數(shù)愛好Flink技術的人一樣,我也被Flink深深吸引,想要更加深入地了解Flink底層的技術組成。
我用了一年多的時間靜心研究Flink技術的底層實現(xiàn)原理,前前后后遇到過很多困難。單純地閱讀源碼是一件比較乏味且需要毅力的事,需要花費非常多的時間和精力,一點點地研究框架中每個模塊的源碼實現(xiàn)以及每個方法的意義、它們之間的調用關系等。雖然過程很枯燥,但是在我將整個Flink框架梳理清楚之后,不禁為Flink框架的內部實現(xiàn)所折服每個代碼細節(jié)都體現(xiàn)了開發(fā)人員的專業(yè)的實現(xiàn)思想,整個框架背后包含了非常多的思想結晶。學習源碼不僅提升了我的技術功底,還加深了我對技術的理解。要想深度掌握一項技術,可以說沒有什么方法比閱讀源碼更加有效了。通常情況下,閱讀源碼有較高的技術門檻,不易下手,我們需要對技術有一定的理解和認識,至少能夠非常熟練地將其應用在實際工作之中,才能更好地了解其底層運行原理。否則在不了解框架使用的情況下貿然學習源碼實現(xiàn),非常容易陷入混亂和迷惑的狀態(tài),從而極大地影響學習體驗。
結合以上學習經(jīng)驗,我希望能夠寫一本將Flink源碼講透的書,幫助那些想深入理解源碼、深度掌握Flink底層核心技術實現(xiàn)但沒有太多時間進行研究的讀者。本書可以幫助讀者更加游刃有余地將Flink這項技術應用到實際工作中。我相信,面對再難的事情,只要我們腳踏實地,循序漸進,終一定會有所領悟,即便達不到非常專業(yè)和精進,也至少比初學有更多的收獲。
讀者對象
本書將從多個方面介紹Flink原理實現(xiàn)與源碼,包括Flink各類編程接口的設計和實現(xiàn)以及集群運行時等內部原理。本書適合以下讀者閱讀。
大數(shù)據(jù)架構師、大數(shù)據(jù)開發(fā)工程師
Flink流計算開發(fā)工程師
數(shù)據(jù)挖掘工程師
如何閱讀本書
全書共8章:第1章介紹Flink設計理念與基本架構;第2章介紹DataStream的設計與實現(xiàn);第3章介紹運行時的核心原理與實現(xiàn),包括Dispatcher、ResourceManager以及JobManager等核心組件的源碼級解析和介紹;第4章介紹Flink任務提交與執(zhí)行的整體流程,包括客戶端實現(xiàn)、運行時作業(yè)執(zhí)行過程、JobGraph及ExecutionGraph圖轉換等;第5章介紹不同的集群部署模式,包括On Yarn、On Kubernetes等;第6章介紹狀態(tài)管理與容錯,包括不同類型狀態(tài)后端的設計與實現(xiàn);第7章介紹Flink網(wǎng)絡通信,包括RPC通信以及基于Netty實現(xiàn)的網(wǎng)絡棧;第8章介紹Flink內存管理,包括MemorySegment的設計與實現(xiàn)等。
勘誤和支持
由于作者的水平有限,書中難免會出現(xiàn)一些錯誤或者不準確的地方,懇請讀者批評指正。Flink技術本身比較新,且處于快速發(fā)展階段,很多新的概念我難免會有疏漏。如果你有任何意見,可以通過電子郵箱zlb1028@126.com聯(lián)系我。期待你的反饋。
致謝
在寫作本書的過程中,我得到很多朋友及同事的幫助和支持,尤其是李蒲生的大力支持,在此表示衷心感謝!
非常感謝我的妻子,因為有她的支持,我才能堅持將這本書寫完。在創(chuàng)作期間,我們還有了孩子,這讓我更加有動力完成自己的創(chuàng)作,也將這本書獻給我們剛出生的小禾元。
感謝機械工業(yè)出版社華章公司的編輯楊福川老師和韓蕊老師在這一年多的時間中始終支持我的寫作,他們的鼓勵和幫助引導我順利完成全部書稿。
謹以此書獻給我親愛的家人以及眾多熱愛Flink的朋友們!
作者簡介
張利兵
資深架構師,流式計算領域專家,第四范式華東區(qū)AI項目架構師,原明略數(shù)據(jù)華東區(qū)大數(shù)據(jù)架構師。
有多年大數(shù)據(jù)、流式計算方面的開發(fā)經(jīng)驗,對Hadoop、Spark、Flink等大數(shù)據(jù)計算引擎有著非常深入的理解,積累了豐富的項目實踐經(jīng)驗。先后利用相關技術為銀行、證券、地鐵等領域的頭部企業(yè)構建了內部大數(shù)據(jù)平臺,參與了基于Flink的實時反欺詐風控、實時地鐵故障預警等流式計算平臺的設計和研發(fā)。
前 言
第1章 Flink設計理念與基本架構 1
1.1 Flink基本設計思想 1
1.1.1 Stratosphere系統(tǒng)架構 1
1.1.2 DataFlow模型的設計思想 3
1.1.3 分布式異步快照算法 6
1.2 Flink整體架構 9
1.2.1 架構介紹 9
1.2.2 Flink集群架構 11
1.2.3 核心概念 12
1.3 Flink源碼分析與編譯 14
1.3.1 源碼編譯 14
1.3.2 源碼調試環(huán)境搭建 15
1.4 本章小結 19
第2章 DataStream的設計與實現(xiàn) 20
2.1 DataStream API的主要組成 20
2.1.1 DataStream API應用實例 20
2.1.2 Transformation詳解 23
2.2 StreamOperator的定義與實現(xiàn) 25
2.2.1 StreamOperator接口實現(xiàn) 26
2.2.2 OneInputStreamOperator與TwoInputStreamOperator 31
2.2.3 StreamOperatorFactory詳解 33
2.3 Function的定義與實現(xiàn) 35
2.3.1 RichFunction詳解 36
2.3.2 SourceFunction與SinkFunction 38
2.3.3 ProcessFunction的定義與實現(xiàn) 44
2.4 TimerService的設計與實現(xiàn) 47
2.4.1 時間概念與Watermark 47
2.4.2 TimerService時間服務 53
2.5 DataStream核心轉換 59
2.5.1 KeyedStream與物理分區(qū) 59
2.5.2 WindowedStream的設計與實現(xiàn) 62
2.6 本章小結 68
第3章 運行時的核心原理與實現(xiàn) 69
3.1 運行時的整體架構 69
3.1.1 運行時整體架構概覽 69
3.1.2 集群的啟動與初始化 72
3.2 運行時組件的創(chuàng)建和啟動 79
3.2.1 集群組件的創(chuàng)建和啟動 79
3.2.2 WebMonitorEndpoint的創(chuàng)建與初始化 85
3.2.3 Dispatcher的創(chuàng)建與初始化 91
3.2.4 ResourceManager的創(chuàng)建與初始化 98
3.2.5 TaskManager的創(chuàng)建與啟動 106
3.3 集群資源管理 115
3.3.1 ResourceManager詳解 116
3.3.2 ResourceManagerGateway接口實現(xiàn) 118
3.3.3 Slot計算資源管理 119
3.4 系統(tǒng)高可用與容錯 130
3.4.1 HighAvailabilityServices的設計與實現(xiàn) 130
3.4.2 基于ZooKeeper實現(xiàn)高可用 135
3.4.3 JobGraphStore的設計與實現(xiàn) 141
3.5 本章小結 144
第4章 任務提交與執(zhí)行 145
4.1 客戶端作業(yè)提交 145
4.1.1 命令行提交 145
4.1.2 創(chuàng)建和初始化CLIFrontend 148
4.1.3 PackagedProgram構造 150
4.2 ExecutionEnvironment初始化 152
4.2.1 ExecutionEnvironment類型 152
4.2.2 StreamExecutionEnvironment詳解 154
4.3 將Pipeline轉換成JobGraph 161
4.3.1 用Transformation生成StreamGraph 162
4.3.2 將StreamGraph轉換為JobGraph 169
4.3.3 將JobGraph提交到集群運行時 176
4.4 JobGraph的接收與運行 178
4.4.1 JobGraph提交整體流程 178
4.4.2 Dispatcher任務與分發(fā) 180
4.4.3 JobManager啟動與初始化 184
4.4.4 JobMaster詳解 188
4.5 ExecutionGraph的調度與執(zhí)行 195
4.5.1 ExecutionGraph生成 198
4.5.2 SchedulerNG調度器 200
4.6 Task的執(zhí)行與注銷 206
4.6.1 Task的啟動與注銷 208
4.6.2 AbstractInvokable的加載與初始化 211
4.6.3 StreamTask詳解 212
4.6.4 StreamTask線程模型 216
4.6.5 Task重啟與容錯策略 223
4.7 本章小結 234
第5章 集群部署模式 235
5.1 基本概念 235
5.1.1 ClusterClient的創(chuàng)建與獲取 235
5.1.2 ClusterEntrypoint集群啟動類 241
5.2 Flink On Yarn的設計與實現(xiàn) 245
5.2.1 Yarn架構的設計與實現(xiàn) 245
5.2.2 Session集群的部署與啟動 247
5.2.3 YarnResourceManager詳解 253
5.3 Flink On Kubernetes的設計與實現(xiàn) 258
5.3.1 Flink On Kubernetes架構 259
5.3.2 Session集群的部署與啟動 261
5.3.3 KubernetesResourceManager詳解 268
5.4 本章小結 274
第6章 狀態(tài)管理與容錯 275
6.1 狀態(tài)數(shù)據(jù)管理 275
6.1.1 狀態(tài)數(shù)據(jù)類型 275
6.1.2 狀態(tài)初始化流程 279
6.2 KeyedState的創(chuàng)建與管理 285
6.2.1 KeyedStateBackend的整體設計 285
6.2.2 HeapKeyedStateBackend的實現(xiàn) 286
6.3 OperatorState的創(chuàng)建與管理 295
6.3.1 OperatorStateBackend的整體設計 295
6.3.2 基于DefaultOperatorState-Backend創(chuàng)建OperatorState 296
6.4 StateBackend詳解 299
6.4.1 StateBackend的整體設計 299
6.4.2 MemoryStateBackend的實現(xiàn) 303
6.5 Checkpoint的設計與實現(xiàn) 308
6.5.1 Checkpoint的實現(xiàn)原理 308
6.5.2 Checkpoint的觸發(fā)過程 315
6.6 本章小結 341
第7章 網(wǎng)絡通信 342
7.1 集群RPC通信機制 342
7.1.1 Flink RPC框架的整體設計 342
7.1.2 AkkaRpcService詳解 347
7.1.3 Rp