Flink核心技術(源碼剖析與特性開發)

黃偉哲 著

  • 出版商: 人民郵電
  • 出版日期: 2022-07-01
  • 定價: $659
  • 售價: 8.5$560
  • 語言: 簡體中文
  • 頁數: 414
  • 裝訂: 平裝
  • ISBN: 7115584478
  • ISBN-13: 9787115584472
  • 立即出貨 (庫存=1)

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

商品描述

本書主要分為兩部分。
第#一部分以核心概念和基本應用為脈絡,介紹了Flink的核心特性(如檢查點機制、時間與窗口、shuffle機制等),
部署,DataStream API、Dataset API、Table API的應用,運行時的原理等內容,
每一章先對概念做基本的介紹,然後基於應用實例詳細分析Flink的設計思想和源碼實現。
第二部分基於對原理的理解,手把手教讀者如何進行定制化的特性開發和性能提升,能夠讓讀者對Flink的理解有質的飛躍。
這一部分內容來自作者大量的工作實踐,
所引用例均源自企業級的真實需求,能夠解決非常複雜的現網問題。
 

作者簡介

黃偉哲
約翰斯·霍普金斯大學碩士,架構師、軟件開發工程師、諮詢師,Spark Contributor。
《人工智能技術與大數據》譯者,目前就職於美團。
在開源大數據框架的應用與特性開發方面有豐富的經驗。
 

目錄大綱

目錄
第1部分 設計思想篇
第1章 序篇3
1.1 Flink的誕生與發展3
1.1.1 Stratosphere項目3
1.1.2 Apache Flink的發展4
1.2 Flink的應用場景5
1.2.1 事件驅動型應用5
1.2.2 數據分析型應用5
1.2.3 數據管道型應用9
1.3 Flink的核心特性與架構9
1.3.1 核心特性9
1.3.2 架構10
1.4 準備工作11
1.5 總結12
第2章 Flink編程13
2.1 API層級13
2.2 DataStream API 14
2.2.1 DataStream版本的
  WordCount 14
2.2.2 數據源16
2.2.3 數據的轉換操作16
2.2.4 數據的輸出20
2.2.5 重分區21
2.3 DataSet API 21
2.3.1 DataSet版本的WordCount 21
2.3.2 數據源22
2.3.3 數據的轉換操作22
2.3.4 數據的輸出24
2.3.5 重分區25
2.4 Table API 25
2.4.1 Table API版本的WordCount 25
2.4.2 初始化執行環境26
2.4.3 獲取Table對象28
2.4.4 Table API中的轉換操作及輸出28
2.5 SQL 34
2.6 總結34
第3章 Flink API層的實現原理36
3.1 DataStream API 37
3.1.1 StreamExecutionEnvironment執行環境37
3.1.2 Function接口分析42
3.1.3 StreamOperator算子分析45
3.1.4 轉換操作分析48
3.1.5 數據流相關類分析53
3.2 DataSet API 59
3.2.1 ExecutionEnvironment執行環境59
3.2.2 InputFormat和OutputFormat 62
3.2.3 數據集相關類分析63
3.3 Table API和SQL 68
3.4 總結71
第4章 Flink的執行圖72
4.1 StreamGraph的生成73
4.1.1 StreamGraphGenerator分析73
4.1.2 StreamGraph分析77
4.1.3 StreamN0de和StreamEdge 80
4.2 Plan的生成81
4.2.1 OperatorTranslation分析82
4.2.2 Plan分析84
4.3 從StreamGraph到JobGraph 85
4.3.1 StreamingJobGraphGenerator分析87
4.3.2 JobGraph分析93
4.3.3 JobVertex、JobEdge和IntermediateDataSet 94
4.4 從Plan到JobGraph 95
4.5 從JobGraph到ExecutionGraph 96
4.5.1 ExecutionGraphBuilder分析98
4.5.2 ExecutionGraph分析99
4.5.3 ExecutionJobVertex、ExecutionVertex和Execution分析102
4.5.4 IntermediateResult、IntermediateResultPartition和ExecutionEdge 106
4.6 總結108
第5章 Flink的運行時架構109
5.1 客戶端代碼的運行110
5.2 高可用相關組件115
5.2.1 EmbeddedHaServices 115
5.2.2 EmbeddedLeaderService 117
5.3 派發器的初始化與啟動122
5.4 資源管理器的初始化與啟動128
5.5 TaskExecutor的初始化與啟動131
5.6 JobMaster的初始化與啟動134
5.7 總結137
第6章 任務調度138
6.1 調度器138
6.1.1 調度器的基本構成與初始化139
6.1.2 構造ExecutionGraph 142
6.2 調度拓撲143
6.3 調度策略147
6.3.1 EagerSchedulingStrategy 147
6.3.2 LazyFromSourcesSchedulingStrategy 149
6.3.3 InputDependencyConstraintChecker 152
6.4 調度過程的實現157
6.4.1 開始調度157
6.4.2 更新任務狀態159
6.4.3 調度或更新消費者163
6.5 任務的部署163
6.6 Execution對像在調度過程中的行為166
6.7 總結173
第7章 任務的生命週期174
7.1 任務的提交174
7.1.1 TaskDeploymentDescriptor 176
7.1.2 ResultPartitionDeployment Descriptor 178
7.1.3 InputGateDeployment Descriptor 180
7.1.4 ShuffleDescriptor 181
7.1.5 ProducerDescriptor和PartitionDescriptor 185
7.1.6 TaskDeploymentDescriptor的提交188
7.2 任務的初始化189
7.2.1 Task的初始化189
7.2.2 ResultPartition的初始化191
7.2.3 InputGate的初始化194
7.3 任務的執行197
7.3.1 StreamTask的初始化202
7.3.2 StreamTask中的重要概念204
7.3.3 StreamTask的實現類219
7.3.4 StreamTask的生命週期222
7.3.5 DataSourceTask、BatchTask和DataSinkTask 227
7.4 總結237
第8章 數據傳輸238
8.1 基本概念與設計思想238
8.1.1 從邏輯執行圖到物理執行圖239
8.1.2 用同一套模型應對批處理和流處理242
8.1.3 混洗242
8.1.4 流量控制245
8.2 數據的輸出252
8.2.1 ResultPartitionType 253
8.2.2 ResultPartitionWriter 256
8.2.3 ResultSubpartition 262
8.3 數據的讀取265
8.3.1 ResultSubpartitionView 266
8.3.2 InputGate 269
8.3.3 InputChannel 273
8.4 反壓機制的原理278
8.5 總結283
第9章 時間與窗口284
9.1 基本概念和設計思想284
9.1.1 從批處理到流處理284
9.1.2 數據流模型的設計思想287
9.1.3 Flink中與窗口操作相關的核心概念289
9.2 WindowedStream 290
9.3 窗口相關模型的實現292
9.3.1 Window類292
9.3.2 WindowAssigner類293
9.3.3 Trigger類294
9.3.4 Evictor類296
9.4 WindowOperator 297
9.5 水位線299
9.5.1 產生水位線300
9.5.2 多個數據流傳來的水位303
9.6 定時器304
9.7 總結307
第10章 狀態與容錯308
10.1 基本概念與設計思想308
10.1.1 狀態與容錯的基本概念308
10.1.2 Hadoop與Spark如何設計容錯機制311
10.1.3 Flink中容錯機制的設計思想311
10.1.4 Flink的狀態與容錯機制的核心概念313
10.2 狀態存儲315
10.2.1 檢查點的觸發316
10.2.2 柵欄的傳輸323
10.2.3 狀態數據的更新和存儲331
10.2.4 元信息的存儲336
10.3 狀態恢復341
10.3.1 元信息的讀取342
10.3.2 狀態的重分配344
10.3.3 狀態數據的恢復347
10.4 狀態的重分配策略349
10.4.1 操作符狀態的重分配350
10.4.2 鍵控狀態的重分配352
10.5 總結353
第二部分 特性開發篇
第11章 動態調整併行度357
11.1 模型設計357
11.1.1 傳統模型的局限357
11.1.2 DS2模型的核心概念358
11.1.3 算法原理359
11.1.4 架構設計360
11.1.5 使用DS2模型的注意事項361
11.2 指標收集361
11.3 指標管理364
11.4 總結366
第12章 自適應查詢執行367
12.1 Flink框架下的自適應查詢執行368
12.1.1 執行階段的劃分368
12.1.2 優化流程368
12.1.3 優化策略370
12.2 統計信息的收集373
12.3 執行圖與調度拓撲的修改374
12.4 上下游關係的建立377
12.5 總結378
第13章 Flink Sort-Merge Shuffle 379
13.1 混洗機制的對比379
13.2 Flink混洗機制381
13.3 Blink混洗的數據流轉382
13.3.1 ExternalResultPartition 383
13.3.2 PartitionMergeFileWriter 384
13.4 Blink混洗的Sort-Merge過程386
13.4.1 PushedUnilateralSort Merger 387
13.4.2 N0rmalizedKeySorter 390
13.4.3 排序線程393
13.4.4 溢寫線程393
13.4.5 合併線程395
13.5 文件的讀取和元信息管理398
13.5.1 ExternalBlockResultPartition Manager 398
13.5.2 ExternalBlockResultPartition Meta 399
13.5.3 ExternalBlockSubpartition View 400
13.6 總結402
第14章 修改檢查點的狀態403
14.1 狀態修改的原理403
14.1.1 狀態元信息的讀取404
14.1.2 狀態數據的讀取405
14.2 狀態處理器API 407
14.2.1 數據的讀取409
14.2.2 數據的寫出413
14.3 總結414