《Flink內(nèi)核原理與實現(xiàn)》既講解了Flink的入門、安裝、流計算開發(fā)入門、類型和序列化系統(tǒng)、監(jiān)控運維、安全管理配置等基礎(chǔ)知識,又講解了Flink的時間概念、Window的實現(xiàn)原理及其代碼解析,F(xiàn)link的容錯機制原理,F(xiàn)link容錯的關(guān)鍵設(shè)計、代碼實現(xiàn)分析,F(xiàn)link Job從源碼到執(zhí)行整個過程的解析,F(xiàn)link Job的調(diào)度策略、資源管理策略、內(nèi)存管理、數(shù)據(jù)交換的關(guān)鍵設(shè)計和代碼實現(xiàn)分析,F(xiàn)link的RPC通信框架等深度內(nèi)容。
《Flink內(nèi)核原理與實現(xiàn)》適合對實時計算感興趣的大數(shù)據(jù)開發(fā)、運維領(lǐng)域的從業(yè)人員閱讀,此外對機器學習工程技術(shù)人員也有所幫助。
序
前言
第1章 Flink入門
1.1 核心特點
1.1.1 批流一體
1.1.2 可靠的容錯能力
1.1.3 高吞吐、低延遲
1.1.4 大規(guī)模復(fù)雜計算
1.1.5 多平臺部署
1.2 架構(gòu)
1.2.1 技術(shù)架構(gòu)
1.2.2 運行架構(gòu)
1.3 Flink的未來
1.4 準備工作
1.5 總結(jié)
第2章 Flink應(yīng)用
2.1 Flink應(yīng)用開發(fā)
2.2 API層次
2.3 數(shù)據(jù)流
2.4 數(shù)據(jù)流API
2.4.1 數(shù)據(jù)讀取
2.4.2 處理數(shù)據(jù)
2.4.3 數(shù)據(jù)寫出
2.4.4 旁路輸出
2.5 總結(jié)
第3章 核心抽象
3.1 環(huán)境對象
3.1.1 執(zhí)行環(huán)境
3.1.2 運行時環(huán)境
3.1.3 運行時上下文
3.2 數(shù)據(jù)流元素
3.3 數(shù)據(jù)轉(zhuǎn)換
3.4 算子
3.4.1 算子行為
3.4.2 Flink算子
3.4.3 Blink算子
3.4.4 異步算子
3.5 函數(shù)體系
3.5.1 函數(shù)層次
3.5.2 處理函數(shù)
3.5.3 廣播函數(shù)
3.5.4 異步函數(shù)
3.5.5 數(shù)據(jù)源函數(shù)
3.5.6 輸出函數(shù)
3.5.7 檢查點函數(shù)
3.6 數(shù)據(jù)分區(qū)
3.7 連接器
3.8 分布式ID
3.9 總結(jié)
第4章 時間與窗口
4.1 時間類型
4.2 窗口類型
4.3 窗口原理與機制
4.3.1 WindowAssigner
4.3.2 WindowTrigger
4.3.3 WindowEvictor
4.3.4 Window函數(shù)
4.4 水印
4.4.1 DataStream Watermark生成
4.4.2 Flink SQL Watermark生成
4.4.3 多流的Watermark
4.5 時間服務(wù)
4.5.1 定時器服務(wù)
4.5.2 定時器
4.5.3 優(yōu)先級隊列
4.6 窗口實現(xiàn)
4.6.1 時間窗口
4.6.2 會話窗口
4.6.3 計數(shù)窗口
4.7 總結(jié)
第5章 類型與序列化
5.1 DataStream類型系統(tǒng)
5.1.1 物理類型
5.1.2 邏輯類型
5.1.3 類型推斷
5.1.4 顯式類型
5.1.5 類型系統(tǒng)存在的問題
5.2 SQL類型系統(tǒng)
5.2.1 Flink Row
5.2.2 Blink Row
5.2.3 ColumnarRow
5.3 數(shù)據(jù)序列化
5.3.1 數(shù)據(jù)序列化/反序列化
5.3.2 String序列化過程示例
5.3.3 作業(yè)序列化
5.3.4 Kryo序列化
5.4 總結(jié)
第6章 內(nèi)存管理
6.1 自主內(nèi)存管理
6.2 內(nèi)存模型
6.2.1 內(nèi)存布局
6.2.2 內(nèi)存計算
6.3 內(nèi)存數(shù)據(jù)結(jié)構(gòu)
6.3.1 內(nèi)存段
6.3.2 內(nèi)存頁
6.3.3 Buffer
6.3.4 Buffer資源池
6.4 內(nèi)存管理器
6.4.1 內(nèi)存申請
6.4.2 內(nèi)存釋放
6.5 網(wǎng)絡(luò)緩沖器
6.5.1 內(nèi)存申請
6.5.2 內(nèi)存回收
6.6 總結(jié)
第7章 狀態(tài)原理
7.1 狀態(tài)類型
7.1.1 KeyedState與OperatorState
7.1.2 原始和托管狀態(tài)
7.2 狀態(tài)描述
7.3 廣播狀態(tài)
7.4 狀態(tài)接口
7.4.1 狀態(tài)操作接口
7.4.2 狀態(tài)訪問接口
7.5 狀態(tài)存儲
7.5.1 內(nèi)存型和文件型狀態(tài)存儲
7.5.2 基于RocksDB的StateBackend
7.6 狀態(tài)持久化
7.7 狀態(tài)重分布
7.7.1 OperatorState重分布
7.7.2 KeyedState重分布
7.8 狀態(tài)過期
7.8.1 DataStream中狀態(tài)過期
7.8.2 Flink SQL中狀態(tài)過期
7.8.3 狀態(tài)過期清理
7.9 總結(jié)
第8章 作業(yè)提交
8.1 提交流程
8.1.1 流水線執(zhí)行器PipelineExecutor
8.1.2 Yarn Session提交流程
8.1.3 Yarn Per-Job提交流程
8.1.4 K8s Session提交流程
8.2 Graph總覽
8.3 流圖
8.3.1 StreamGraph核心對象
8.3.2 StreamGraph生成過程
8.3.3 單輸入物理Transformation的轉(zhuǎn)換示例
8.3.4 虛擬Transformation的轉(zhuǎn)換示例
8.4 作業(yè)圖
8.4.1 JobGraph核心對象
8.4.2 JobGraph生成過程
8.4.3 算子融合
8.5 執(zhí)行圖
8.5.1 ExecutionGraph核心對象
8.5.2 ExecutionGraph生成過程
8.6 總結(jié)
第9章 資源管理
9.1 資源抽象
9.2 資源管理器
9.3 Slot管理器
9.4 SlotProvider
9.5 Slot選擇策略
9.6 Slot資源池
9.7 Slot共享
9.8 總結(jié)
第10章 作業(yè)調(diào)度
10.1 調(diào)度
10.2 執(zhí)行模式
10.3 數(shù)據(jù)交換模式
10.4 作業(yè)生命周期
10.4.1 作業(yè)生命周期狀態(tài)
10.4.2 Task的生命周期
10.5 關(guān)鍵組件
10.5.1 JobMaster
10.5.2 TaskManager
10.5.3 Task
10.5.4 StreamTask
10.6 作業(yè)啟動
10.6.1 JobMaster啟動作業(yè)
10.6.2 流作業(yè)啟動調(diào)度
10.6.3 批作業(yè)調(diào)度
10.6.4 TaskManger啟動Task
10.7 作業(yè)停止
10.8 作業(yè)失敗調(diào)度
10.8.1 默認作業(yè)失敗調(diào)度
10.8.2 遺留的作業(yè)失敗調(diào)度
10.9 組件容錯
10.9.1 容錯設(shè)計
10.9.2 HA服務(wù)
10.9.3 JobMaster的容錯
10.9.4 ResourceManager容錯
10.9.5 TaskManager 的容錯
10.10 總結(jié)
第11章 作業(yè)執(zhí)行
11.1 作業(yè)執(zhí)行圖
11.2 核心對象
11.2.1 輸入處理器
11.2.2 Task輸入
11.2.3 Task輸出
11.2.4 結(jié)果分區(qū)
11.2.5 結(jié)果子分區(qū)
11.2.6 有限數(shù)據(jù)集
11.2.7 輸入網(wǎng)關(guān)
11.2.8 輸入通道
11.3 Task執(zhí)行
11.3.1 Task處理數(shù)據(jù)
11.3.2 Task處理Watermark
11.3.3 Task處理StreamStatus
11.3.4 Task處理LatencyMarker
11.4 總結(jié)
第12章 數(shù)據(jù)交換
12.1 數(shù)據(jù)傳遞模式
12.2 關(guān)鍵組件
12.2.1 RecordWriter
12.2.2 數(shù)據(jù)記錄序列化器
12.2.3 數(shù)據(jù)記錄反序列化器
12.2.4 結(jié)果子分區(qū)視圖
12.2.5 數(shù)據(jù)輸出
12.3 數(shù)據(jù)傳遞
12.3.1 本地線程內(nèi)的數(shù)據(jù)傳遞
12.3.2 本地線程間的數(shù)據(jù)傳遞
12.3.3 跨網(wǎng)絡(luò)的數(shù)據(jù)傳遞
12.4 數(shù)據(jù)傳遞過程
12.4.1 數(shù)據(jù)讀取
12.4.2 數(shù)據(jù)寫出
12.4.3 數(shù)據(jù)清理
12.5 網(wǎng)絡(luò)通信
12.5.1 網(wǎng)絡(luò)連接
12.5.2 無流控
12.5.3 基于信用的流控
12.6 總結(jié)
第13章 應(yīng)用容錯
13.1 容錯保證語義
13.2 檢查點與保存點
13.3 作業(yè)恢復(fù)
13.3.1 檢查點恢復(fù)
13.3.2 保存點恢復(fù)
13.3.3 恢復(fù)時的時間問題
13.4 關(guān)鍵組件
13.4.1 檢查點協(xié)調(diào)器
13.4.2 檢查點消息
13.5 輕量級異步分布式快照
13.5.1 基本概念
13.5.2 Barrier對齊
13.6 檢查點執(zhí)行過程
13.6.1 JobMaster觸發(fā)檢查點
13.6.2 TaskExecutor執(zhí)行檢查點
13.6.3 JobMaster確認檢查點
13.7 檢查點恢復(fù)過程
13.8 端到端嚴格一次
13.8.1 兩階段提交協(xié)議
13.8.2 兩階段提交實現(xiàn)
13.9 總結(jié)
第14章 Flink SQL
14.1 Apache Calcite
14.1.1 Calcite是什么
14.1.2 Calcite的技術(shù)特點
14.1.3 Calcite的主要功能
14.1.4 Calcite的核心原理
14.2 動態(tài)表
14.2.1 流映射為表
14.2.2 連續(xù)查詢
14.2.3 流上SQL查詢限制
14.2.4 表到流的轉(zhuǎn)換
14.3 TableEnvironment
14.3.1 TableEnvironment體系
14.3.2 TableEnvironment使用示例
14.4 Table API
14.5 SQL API
14.6 元數(shù)據(jù)
14.6.1 元數(shù)據(jù)管理
14.6.2 元數(shù)據(jù)分類
14.7數(shù)據(jù)訪問
14.7.1Table Source
14.7.2Table Slink
14.8 SQL函數(shù)
14.9 Planner關(guān)鍵抽象
14.9.1 Expression
14.9.2 ExpressionResolver
14.9.3 Operation
14.9.4 QueryOperation
14.9.5 物理計劃節(jié)點
14.10 Blink Planner和Flink Planner對比
14.11 Blink與Calcite關(guān)系
14.12 Blink SQL執(zhí)行過程
14.12.1 從SQL到Operation
14.12.2 Operation到Transformation
14.13 Blink Table API執(zhí)行過程
14.13.1 Table API到Operation
14.13.2 Operation到Transformation
14.14 Flink與Calcite的關(guān)系
14.15 Flink SQL執(zhí)行過程
14.15.1 SQL 到Operation
14.15.2 Operation到DataStream/DataSet
14.16 Flink Table API執(zhí)行過程
14.17 SQL優(yōu)化
14.18 Blink優(yōu)化
14.18.1 優(yōu)化器
14.18.2 代價計算
14.18.3 優(yōu)化過程
14.18.4 優(yōu)化規(guī)則
14.18.5 公共子圖
14.19 Flink優(yōu)化
14.19.1 優(yōu)化器
14.19.2 優(yōu)化過程
14.19.3 優(yōu)化規(guī)則
14.20 代碼生成
14.20.1 為什么進行代碼生成
14.20.2 代碼生成范圍
14.20.3 代碼生成示例
14.21 總結(jié)
第15章 運維監(jiān)控
15.1 監(jiān)控指標
15.2 指標組
15.3 監(jiān)控集成
15.4 指標注冊中心
15.5 指標查詢服務(wù)
15.6 延遲跟蹤實現(xiàn)原理
15.7 總結(jié)
第16章 RPC框架
16.1 Akka簡介
16.1.1 Akka是什么
16.1.2 使用Akka
16.1.3 Akka的通信
16.2 RPC消息的類型
16.3 RPC通信組件
16.3.1 RpcGateway
16.3.2 RpcEndpoint
16.3.3 RpcService
16.3.4 RpcServer
16.3.5 AkkaRpcActor
16.4 RPC交互過程
16.4.1 RPC請求發(fā)送
16.4.2 RPC請求響應(yīng)
16.5總結(jié)
專家寄語
參考文獻