Flink的四张图
-
DataFlow Graph(数据流图)
是代码写完之后,根据API就生成了。
-
Job Graph(任务图)
是客户端根据数据流图优化后的图。
-
Execution Graph(执行图)
是客户端把任务图(Job Graph)提交给集群后,集群的JobManager根据任务图解析,转换成了Execution Graph。
-
Physical Graph(物理图)
是JobManager把Executor Graph调度给TaskManager执行,TaskManager收到Execution Graph后,把执行图解析,转换成了能够具体执行任务的物理图。
算子&算子链
算子:每一个Flink程序的方法。Flink的算子分为三类:
-
source算子
-
transform算子
-
sink算子
算子链:把one-to-one算子进行合并后,形成多个算子在一起的情况,叫做算子链。
槽&槽共享
槽:也是slot,是TaskManager上的固定的资源。任务必须在slot里运行。
槽共享:一个槽,可以运行多个不同Task的SubTask。
并行度
Flink提供了四种设置并行度的方式:
-
配置文件(默认的,优先级最低)
-
任务提交(-p 3)
-
代码全局层面(env.setParallelism(3))
-
算子层面(map.setParallelism(3),优先级最高)
优先级的高低顺序如下:
算子层面 -> 代码全局层面 -> 任务提交 -> 配置文件
宽窄依赖
Spark的宽窄依赖如下:
Narrow Dependency,窄依赖
Shuffle Dependency,宽依赖
Flink的宽窄依赖如下:
One-to-One Dependency,窄依赖,数据流中上下游算子的依赖是一对一的。
Redistribution Dependency,宽依赖,数据流中上下游算子的依赖是一对多的。
Flink的层级关系
Flink集群 -> Job(作业) -> Task(任务,根据宽依赖算子) -> SubTask(子任务,并行度)
备注:
Slot(槽) 固定的静态资源
并行度:动态的任务执行参数
并行度 <= 可用槽数量
比如说:slot,只有4个
但是,并行度设置为5
Standalone集群,执行失败的。
Yarn集群,可以正常执行。因为Yarn可以动态开启Container(TaskManager)