Flink 設計與實現:核心原理與源碼解析

張利兵

  • 出版商: 機械工業
  • 出版日期: 2021-09-01
  • 定價: $774
  • 售價: 8.5$658
  • 語言: 簡體中文
  • 頁數: 515
  • 裝訂: 平裝
  • ISBN: 7111687833
  • ISBN-13: 9787111687832
  • 相關分類: 大數據 Big-data
  • 立即出貨 (庫存 < 4)

買這商品的人也買了...

商品描述

這是一本從源代碼角度剖析Flink設計思想、
架構原理以及各功能模塊的底層實現原理的著作。

作者是Flink領域的資深技術專家和架構師,對Flink的源代碼進行了深入分析和解讀,
同時融入了自己豐富的工程實踐經驗,既能讓理解Flink的設計與實現原理,
又能為他們解決性能優化等實際應用問題提供源碼級別的指導。
源碼大多艱澀難懂,為了降低讀者的學習門檻,
本書提供了大量架構設計圖、UML圖和代碼註釋。

通過閱讀本書,你將:

l 徹底掌握Flink源碼設計與實現
l 深度掌握Flink作業運行流程
l 深入了解Flink部署模式實現原理
l 深度掌握Flink Runtime設計和實現原理
l 庖丁解牛Flink網絡通信原理
l 探索Flink內存管理實現
l 深入了解Flink接口設計
l 從Flink源碼中學習架構設計經驗

作者簡介

張利兵
資深大數據專家和架構師,現任第四範式AI數據平台架構師,曾就職於明略數據。Apache Flink的貢獻者,對Flink有非常深入的研究。
長期從事大數據架構落地以及機器學習平台與數據平台研發架構工作,在Hadoop、Spark、機器學習等方面積累了豐富的經驗。先後參與和主導了銀行、證券、地鐵等領域的大數據平台的架構設計與實現。
《Flink原理、實戰與性能優化》作者,極客時間《Flink原理與實戰》專欄作者。獲得Cloudera CCAH認證、Cloudera SEBC認證以及Cloudera認證,擁有非常豐富的寫作和授課經驗。

目錄大綱

前 言
第1章 Flink設計理念與基本架構 1
1.1 Flink基本設計思想 1
1.1.1 Stratosphere系統架構 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 源碼調試環境搭建 15
1.4 本章小結 19

第2章 DataStream的設計與實現 20
2.1 DataStream API的主要組成 20
2.1.1 DataStream API應用實例 20
2.1.2 Transformation詳解 23
2.2 StreamOperator的定義與實現 25
2.2.1 StreamOperator接口實現 26
2.2.2 OneInputStreamOperator與TwoInputStreamOperator 31
2.2.3 StreamOperatorFactory詳解 33
2.3 Function的定義與實現 35
2.3.1 RichFunction詳解 36
2.3.2 SourceFunction與SinkFunction 38
2.3.3 ProcessFunction的定義與實現 44
2.4 TimerService的設計與實現 47
2.4.1 時間概念與Watermark 47
2.4.2 TimerService時間服務 53
2.5 DataStream核心轉換 59
2.5.1 KeyedStream與物理分區 59
2.5.2 WindowedStream的設計與實現 62
2.6 本章小結 68

第3章 運行時的核心原理與實現 69
3.1 運行時的整體架構 69
3.1.1 運行時整體架構概覽 69
3.1.2 集群的啟動與初始化 72
3.2 運行時組件的創建和啟動 79
3.2.1 集群組件的創建和啟動 79
3.2.2 WebMonitorEndpoint的創建與初始化 85
3.2.3 Dispatcher的創建與初始化 91
3.2.4 ResourceManager的創建與初始化 98
3.2.5 TaskManager的創建與啟動 106
3.3 集群資源管理 115
3.3.1 ResourceManager詳解 116
3.3.2 ResourceManagerGateway接口實現 118
3.3.3 Slot計算資源管理 119
3.4 系統高可用與容錯 130
3.4.1 HighAvailabilityServices的設計與實現 130
3.4.2 基於ZooKeeper實現高可用 135
3.4.3 JobGraphStore的設計與實現 141
3.5 本章小結 144

第4章 任務提交與執行 145
4.1 客戶端作業提交 145
4.1.1 命令行提交 145
4.1.2 創建和初始化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任務與分發 180
4.4.3 JobManager啟動與初始化 184
4.4.4 JobMaster詳解 188
4.5 ExecutionGraph的調度與執行 195
4.5.1 ExecutionGraph生成 198
4.5.2 SchedulerNG調度器 200
4.6 Task的執行與註銷 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的創建與獲取 235
5.1.2 ClusterEntrypoint集群啟動類 241
5.2 Flink On Yarn的設計與實現 245
5.2.1 Yarn架構的設計與實現 245
5.2.2 Session集群的部署與啟動 247
5.2.3 YarnResourceManager詳解 253
5.3 Flink On Kubernetes的設計與實現 258
5.3.1 Flink On Kubernetes架構 259
5.3.2 Session集群的部署與啟動 261
5.3.3 KubernetesResourceManager詳解 268
5.4 本章小結 274

第6章 狀態管理與容錯 275
6.1 狀態數據管理 275
6.1.1 狀態數據類型 275
6.1.2 狀態初始化流程 279
6.2 KeyedState的創建與管理 285
6.2.1 KeyedStateBackend的整體設計 285
6.2.2 HeapKeyedStateBackend的實現 286
6.3 OperatorState的創建與管理 295
6.3.1 OperatorStateBackend的整體設計 295
6.3.2 基於DefaultOperatorState-Backend創建OperatorState 296
6.4 StateBackend詳解 299
6.4.1 StateBackend的整體設計 299
6.4.2 MemoryStateBackend的實現 303
6.5 Checkpoint的設計與實現 308
6.5.1 Checkpoint的實現原理 308
6.5.2 Checkpoint的觸發過程 315
6.6 本章小結 341

第7章 網絡通信 342
7.1 集群RPC通信機制 342
7.1.1 Flink RPC框架的整體設計 342
7.1.2 AkkaRpcService詳解 347
7.1.3 RpcServer動態代理實現 357
7.1.4 AkkaRpcActor的設計與實現 360
7.1.5 集群組件之間的RPC通信 363
7.2 NetworkStack的設計與實現 371
7.2.1 NetworkStack概覽 371
7.2.2 StreamTask數據流 374
7.2.3 RecordWriter詳解 384
7.2.4 ShuffleMaster與Shuffle-Environment 394
7.2.5 ResultPartition與InputGate詳解 410
7.2.6 ConnectManager的設計與實現 424
7.2.7 NetworkBuffer資源管理 449
7.3 基於信用值的反壓機制實現 463
7.3.1 反壓機制理論基礎 463
7.3.2 基於信用值的反壓機制詳解 466
7.4 本章小結 475

第8章 內存管理 476
8.1 內存管理概述 476
8.1.1 積極的內存管理 476
8.1.2 Flink內存模型 478
8.2 MemorySegment的設計與實現 479
8.2.1 MemorySegment架構概覽 480
8.2.2 MemorySegment詳解 481
8.2.3 MemorySegment內存使用 486
8.3 DataInputView與DataOutputView 489
8.3.1 DataInputDeserializer和DataOutputSerializer 491
8.3.2 DataInputViewStreamWrapper與DataOutputViewStreamWrapper 494
8.3.3 AbstractPagedInputView與AbstractPagedOutputView 495
8.4 數據序列化與反序列化 501
8.4.1 TypeInformation類型系統 501
8.4.2 RecordSerializer與RecordDeserializer 508
8.5 本章小結 515