《Flink內核原理與實現》既講解了Flink的入門、安裝、流計算開發(fā)入門、類型和序列化系統、監(jiān)控運維、安全管理配置等基礎知識,又講解了Flink的時間概念、Window的實現原理及其代碼解析,Flink的容錯機制原理,Flink容錯的關鍵設計、代碼實現分析,Flink Job從源碼到執(zhí)行整個過程的解析,Flink Job的調度策略、資源管理策略、內存管理、數據交換的關鍵設計和代碼實現分析,Flink的RPC通信框架等深度內容。
《Flink內核原理與實現》適合對實時計算感興趣的大數據開發(fā)、運維領域的從業(yè)人員閱讀,此外對機器學習工程技術人員也有所幫助。
序
前言
第1章 Flink入門
1.1 核心特點
1.1.1 批流一體
1.1.2 可靠的容錯能力
1.1.3 高吞吐、低延遲
1.1.4 大規(guī)模復雜計算
1.1.5 多平臺部署
1.2 架構
1.2.1 技術架構
1.2.2 運行架構
1.3 Flink的未來
1.4 準備工作
1.5 總結
第2章 Flink應用
2.1 Flink應用開發(fā)
2.2 API層次
2.3 數據流
2.4 數據流API
2.4.1 數據讀取
2.4.2 處理數據
2.4.3 數據寫出
2.4.4 旁路輸出
2.5 總結
第3章 核心抽象
3.1 環(huán)境對象
3.1.1 執(zhí)行環(huán)境
3.1.2 運行時環(huán)境
3.1.3 運行時上下文
3.2 數據流元素
3.3 數據轉換
3.4 算子
3.4.1 算子行為
3.4.2 Flink算子
3.4.3 Blink算子
3.4.4 異步算子
3.5 函數體系
3.5.1 函數層次
3.5.2 處理函數
3.5.3 廣播函數
3.5.4 異步函數
3.5.5 數據源函數
3.5.6 輸出函數
3.5.7 檢查點函數
3.6 數據分區(qū)
3.7 連接器
3.8 分布式ID
3.9 總結
第4章 時間與窗口
4.1 時間類型
4.2 窗口類型
4.3 窗口原理與機制
4.3.1 WindowAssigner
4.3.2 WindowTrigger
4.3.3 WindowEvictor
4.3.4 Window函數
4.4 水印
4.4.1 DataStream Watermark生成
4.4.2 Flink SQL Watermark生成
4.4.3 多流的Watermark
4.5 時間服務
4.5.1 定時器服務
4.5.2 定時器
4.5.3 優(yōu)先級隊列
4.6 窗口實現
4.6.1 時間窗口
4.6.2 會話窗口
4.6.3 計數窗口
4.7 總結
第5章 類型與序列化
5.1 DataStream類型系統
5.1.1 物理類型
5.1.2 邏輯類型
5.1.3 類型推斷
5.1.4 顯式類型
5.1.5 類型系統存在的問題
5.2 SQL類型系統
5.2.1 Flink Row
5.2.2 Blink Row
5.2.3 ColumnarRow
5.3 數據序列化
5.3.1 數據序列化/反序列化
5.3.2 String序列化過程示例
5.3.3 作業(yè)序列化
5.3.4 Kryo序列化
5.4 總結
第6章 內存管理
6.1 自主內存管理
6.2 內存模型
6.2.1 內存布局
6.2.2 內存計算
6.3 內存數據結構
6.3.1 內存段
6.3.2 內存頁
6.3.3 Buffer
6.3.4 Buffer資源池
6.4 內存管理器
6.4.1 內存申請
6.4.2 內存釋放
6.5 網絡緩沖器
6.5.1 內存申請
6.5.2 內存回收
6.6 總結
第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 內存型和文件型狀態(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 總結
第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的轉換示例
8.3.4 虛擬Transformation的轉換示例
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 總結
第9章 資源管理
9.1 資源抽象
9.2 資源管理器
9.3 Slot管理器
9.4 SlotProvider
9.5 Slot選擇策略
9.6 Slot資源池
9.7 Slot共享
9.8 總結
第10章 作業(yè)調度
10.1 調度
10.2 執(zhí)行模式
10.3 數據交換模式
10.4 作業(yè)生命周期
10.4.1 作業(yè)生命周期狀態(tài)
10.4.2 Task的生命周期
10.5 關鍵組件
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è)啟動調度
10.6.3 批作業(yè)調度
10.6.4 TaskManger啟動Task
10.7 作業(yè)停止
10.8 作業(yè)失敗調度
10.8.1 默認作業(yè)失敗調度
10.8.2 遺留的作業(yè)失敗調度
10.9 組件容錯
10.9.1 容錯設計
10.9.2 HA服務
10.9.3 JobMaster的容錯
10.9.4 ResourceManager容錯
10.9.5 TaskManager 的容錯
10.10 總結
第11章 作業(yè)執(zhí)行
11.1 作業(yè)執(zhí)行圖
11.2 核心對象
11.2.1 輸入處理器
11.2.2 Task輸入
11.2.3 Task輸出
11.2.4 結果分區(qū)
11.2.5 結果子分區(qū)
11.2.6 有限數據集
11.2.7 輸入網關
11.2.8 輸入通道
11.3 Task執(zhí)行
11.3.1 Task處理數據
11.3.2 Task處理Watermark
11.3.3 Task處理StreamStatus
11.3.4 Task處理LatencyMarker
11.4 總結
第12章 數據交換
12.1 數據傳遞模式
12.2 關鍵組件
12.2.1 RecordWriter
12.2.2 數據記錄序列化器
12.2.3 數據記錄反序列化器
12.2.4 結果子分區(qū)視圖
12.2.5 數據輸出
12.3 數據傳遞
12.3.1 本地線程內的數據傳遞
12.3.2 本地線程間的數據傳遞
12.3.3 跨網絡的數據傳遞
12.4 數據傳遞過程
12.4.1 數據讀取
12.4.2 數據寫出
12.4.3 數據清理
12.5 網絡通信
12.5.1 網絡連接
12.5.2 無流控
12.5.3 基于信用的流控
12.6 總結
第13章 應用容錯
13.1 容錯保證語義
13.2 檢查點與保存點
13.3 作業(yè)恢復
13.3.1 檢查點恢復
13.3.2 保存點恢復
13.3.3 恢復時的時間問題
13.4 關鍵組件
13.4.1 檢查點協調器
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 檢查點恢復過程
13.8 端到端嚴格一次
13.8.1 兩階段提交協議
13.8.2 兩階段提交實現
13.9 總結
第14章 Flink SQL
14.1 Apache Calcite
14.1.1 Calcite是什么
14.1.2 Calcite的技術特點
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 表到流的轉換
14.3 TableEnvironment
14.3.1 TableEnvironment體系
14.3.2 TableEnvironment使用示例
14.4 Table API
14.5 SQL API
14.6 元數據
14.6.1 元數據管理
14.6.2 元數據分類
14.7數據訪問
14.7.1Table Source
14.7.2Table Slink
14.8 SQL函數
14.9 Planner關鍵抽象
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關系
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的關系
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 總結
第15章 運維監(jiān)控
15.1 監(jiān)控指標
15.2 指標組
15.3 監(jiān)控集成
15.4 指標注冊中心
15.5 指標查詢服務
15.6 延遲跟蹤實現原理
15.7 總結
第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請求響應
16.5總結
專家寄語
參考文獻