第1章 Flink设计理念与基本架构 1
' @/ Y! `6 }3 e8 o2 ^: y5 a1.1 Flink基本设计思想 1
4 `" o6 ?9 y6 d$ S1.1.1 Stratosphere系统架构 1% }7 q3 Y w6 W5 D1 e
1.1.2 DataFlow模型的设计思想 3- P& B2 ^9 J$ R% |, z( E: P
1.1.3 分布式异步快照算法 6
4 `; M$ @1 p! {1.2 Flink整体架构 93 `7 \: q/ @( J. i; a! z# b
1.2.1 架构介绍 9+ `+ f( s4 I" I6 z' ^
1.2.2 Flink集群架构 11
3 P( m) ^9 t( f/ R$ z1.2.3 核心概念 12
7 L+ B' p( L# f- K7 _1.3 Flink源码分析与编译 14
5 e1 V6 V' r# |/ o1.3.1 源码编译 14
7 X" Q8 ?7 C% x% n* l1.3.2 源码调试环境搭建 15# i0 y! v; C& B9 G! _2 Y
1.4 本章小结 19
( _) e, Y: B. |6 v第2章 DataStream的设计与实现 20* Z) l- O/ C1 L3 R
2.1 DataStream API的主要组成 20
& s" [ H2 W% |- E2.1.1 DataStream API应用实例 20
2 a s" \; P. Q4 s& y1 \6 v* B$ `2.1.2 Transformation详解 23& n' A* B8 [1 O! L; S
2.2 StreamOperator的定义与实现 25# U) P* {) P) N9 X6 |
2.2.1 StreamOperator接口实现 262 ?* [+ C8 k6 s% H+ {% _& A
2.2.2 OneInputStreamOperator与TwoInputStreamOperator 31
i2 Q% P2 r; z1 [% D# ]% Y, c# Y7 a2.2.3 StreamOperatorFactory详解 33
+ }( l5 m3 O- d9 k1 W; `% I2.3 Function的定义与实现 35
/ ?3 c1 k8 f& G. d5 p' C$ Q" O2.3.1 RichFunction详解 36
s/ U I) R! m' R8 t% J4 }7 N" f2.3.2 SourceFunction与SinkFunction 38
7 _, D+ p" J1 N% U6 C2.3.3 ProcessFunction的定义与实现 44
- X9 K, `' F1 ~' e/ o: F2.4 TimerService的设计与实现 475 N, A7 c' n% O' _4 O
2.4.1 时间概念与Watermark 47" b" ]8 ]1 B4 Z. s" @9 o$ u, J
2.4.2 TimerService时间服务 533 |% C' Z5 B2 o8 [* g k m6 h. h, r
2.5 DataStream核心转换 59
- Y, q1 e3 |' E: l$ w2.5.1 KeyedStream与物理分区 59; v8 M& l1 E/ c' L+ b7 R7 N1 W
2.5.2 WindowedStream的设计与实现 62
; X) R: |( f k7 \/ u) w2.6 本章小结 68
9 [$ K& B; B; }0 k$ ]7 Z2 G1 |第3章 运行时的核心原理与实现 69
8 i( I! J9 ~0 c2 m) w% }3.1 运行时的整体架构 697 C" {' ~5 y8 Q
3.1.1 运行时整体架构概览 69
- n: v; J7 T2 w; O9 Z) a# y3.1.2 集群的启动与初始化 72
1 `% Z) d! M X/ {/ W' t" O3.2 运行时组件的创建和启动 79
! T' |: W/ Q2 g' t3.2.1 集群组件的创建和启动 79
, c6 p( u# ~9 I8 ]7 x6 t4 s1 X3.2.2 WebMonitorEndpoint的创建与初始化 857 w( F# x& @% |! @( r% v
3.2.3 Dispatcher的创建与初始化 91
" H( x7 e2 j# L3.2.4 ResourceManager的创建与初始化 98
* U) f7 ^# o# ?7 \: z M8 k3.2.5 TaskManager的创建与启动 106& i) _: l& w" H
3.3 集群资源管理 115
' C9 o: t/ p- n; M0 z3.3.1 ResourceManager详解 116 _ d0 |1 y. [: T4 V/ \5 I
3.3.2 ResourceManagerGateway接口实现 118* |( P; V3 M( v) y
3.3.3 Slot计算资源管理 119
' l; I- n2 t! U$ A. v3.4 系统高可用与容错 130+ r6 @1 P: n7 ^+ r2 J# E1 e
3.4.1 HighAvailabilityServices的设计与实现 1300 |$ N4 v4 X0 W+ ?3 f. N! U
3.4.2 基于ZooKeeper实现高可用 135
5 p, Y$ p& l, v: D% f3.4.3 JobGraphStore的设计与实现 141
+ ]9 }& _, r1 C' S3.5 本章小结 144; } t# C! l! R- ~
第4章 任务提交与执行 145
* Y; g! W. E0 e- T2 a: w7 c5 u4.1 客户端作业提交 145
& y8 y6 o+ k4 q3 r( Z& e4.1.1 命令行提交 145
& {- F. ?7 M5 E4.1.2 创建和初始化CLIFrontend 148
" B, b* L' e" X. S0 z/ I1 `9 x4.1.3 PackagedProgram构造 150( z! V5 p# X! o2 n- R
4.2 ExecutionEnvironment初始化 152
9 ?3 g$ D- Z+ V2 x4.2.1 ExecutionEnvironment类型 1522 S; V3 R7 U9 B$ V* `6 F6 i
4.2.2 StreamExecutionEnvironment详解 154* X) P( u; U- n" Q4 U0 G) {, {/ k
4.3 将Pipeline转换成JobGraph 161
9 j) n3 [ \6 r. A$ u& x4.3.1 用Transformation生成StreamGraph 162
- S7 q* G Y" W2 l: `4.3.2 将StreamGraph转换为JobGraph 169
! |+ Y. Q8 A: z4.3.3 将JobGraph提交到集群运行时 176
# y l! b' t, {2 H4 P* ]4.4 JobGraph的接收与运行 178
3 E! f1 Z4 n8 K4 M6 R+ a2 C4.4.1 JobGraph提交整体流程 178
2 i Y" |5 z5 V% r4.4.2 Dispatcher任务与分发 180# C) H8 b2 _: i. o
4.4.3 JobManager启动与初始化 184
) z" b1 a( n- v! M4 N/ R, q# J( q4.4.4 JobMaster详解 188
3 |# [1 `8 ~6 j( w( R. [' x4 l" a4 e4.5 ExecutionGraph的调度与执行 195
$ e" ?4 [( o" d7 ?4.5.1 ExecutionGraph生成 198
9 e1 x0 ^/ o- h- h4.5.2 SchedulerNG调度器 200, O8 o% J8 a7 [. T: f6 s" r
4.6 Task的执行与注销 2069 m5 I) {9 N. y! X1 S5 w n
4.6.1 Task的启动与注销 208
4 v3 D8 D, r% X$ P% }% m3 X4.6.2 AbstractInvokable的加载与初始化 211
" i C, I1 Z/ u6 a; E4.6.3 StreamTask详解 212: c& G0 r( s! ^4 V% j3 Q, x6 \7 x x" s
4.6.4 StreamTask线程模型 216 a" D T3 Q) y, \6 A9 b1 V5 e
4.6.5 Task重启与容错策略 223% G6 l7 v7 w1 @2 X
4.7 本章小结 2340 r( E! [9 ~6 M: s. R; ]: I- x
第5章 集群部署模式 235/ B% y" v9 y" O7 c& E
5.1 基本概念 235
1 K0 _1 A! g; v" |' `, b2 P' u5.1.1 ClusterClient的创建与获取 235( U; J, ?: j7 N) r$ i$ f
5.1.2 ClusterEntrypoint集群启动类 241
+ I8 v! E4 ~5 w& g$ E5.2 Flink On Yarn的设计与实现 245 I/ w" `4 i4 F; Q7 U& S
5.2.1 Yarn架构的设计与实现 2453 B" f% K/ I W, y1 ~
5.2.2 Session集群的部署与启动 247
* f# y& o( A: f5 ?5.2.3 YarnResourceManager详解 253
. C+ P8 E j6 F5 L5.3 Flink On Kubernetes的设计与实现 258$ C7 Q" |* Z, ^% I0 B! a4 H
5.3.1 Flink On Kubernetes架构 259
- B. ^7 J5 ]1 `+ w5.3.2 Session集群的部署与启动 261# L, a3 r; u- v2 K* A5 U3 U" i
5.3.3 KubernetesResourceManager详解 268/ [! r5 M& e/ V
5.4 本章小结 274( ~3 G- Z) z9 a9 k I( [ O* r
第6章 状态管理与容错 275
' ~* x5 x& b$ ^5 a6.1 状态数据管理 275
5 C1 H' @) l7 x1 R. o* A% B8 n* M6.1.1 状态数据类型 275
T8 r1 v3 _7 j% {2 ^6.1.2 状态初始化流程 2792 i" O5 }) k1 R, b- Y8 A
6.2 KeyedState的创建与管理 285
9 [% h& O$ N! Q6.2.1 KeyedStateBackend的整体设计 285% q0 b; j' h$ `& S, ]+ l
6.2.2 HeapKeyedStateBackend的实现 2863 Q% c* V" I% V) P+ \8 V
6.3 OperatorState的创建与管理 295
2 U. o( ?& |4 V* e$ O6.3.1 OperatorStateBackend的整体设计 295
9 F9 x* G @9 ^6.3.2 基于DefaultOperatorState-Backend创建OperatorState 296
2 {" H9 l0 T% B9 H: F0 ^6.4 StateBackend详解 299* o' x+ u. r# D' V! | W
6.4.1 StateBackend的整体设计 299/ D8 i* u8 {; X9 K, @& K( @6 v
6.4.2 MemoryStateBackend的实现 303: [8 i2 |$ R; d) I
6.5 Checkpoint的设计与实现 308
& e! n6 t4 j. M7 l6.5.1 Checkpoint的实现原理 308# N7 ~* z" h i d2 @1 S5 [
6.5.2 Checkpoint的触发过程 315
$ o$ D) g& A y: H6.6 本章小结 341
f: R( Q" {8 L0 e) q2 d4 Y, N! _% G第7章 网络通信 342+ t W& |; O4 o1 u9 X/ g
7.1 集群RPC通信机制 342
$ h W2 R/ k; A ~7.1.1 Flink RPC框架的整体设计 342
' N! Z) u( G+ H6 B+ \. m1 i7.1.2 AkkaRpcService详解 3474 D' _+ q7 a# ^9 d, Q7 _
7.1.3 Rp
* G" m! ^8 g7 j7 B