https://developer.aliyun.com/article/225618
概念
https://www.freesion.com/article/4063674538/
-
Task(任务):Task 是一个阶段多个功能相同 subTask 的集合,类似于 Spark 中的 TaskSet。
-
subTask(子任务):subTask 是 Flink 中任务最小执行单元,是一个 Java 类的实例,这个 Java 类中有属性和方法,完成具体的计算逻辑。
-
Operator Chains(算子链):没有 shuffle 的多个算子合并在一个 subTask 中,就形成了 Operator Chains,类似于 Spark 中的 Pipeline。
-
Slot(插槽):Flink 中计算资源进行隔离的单元,一个 Slot 中可以运行多个 subTask,但是这些 subTask 必须是来自同一个 application 的不同阶段的 subTask。
-
算子(Operator)将一个或多个 DataStream 转换为新的 DataStream。程序可以将多个转换组合成复杂的数据流拓扑。
-
对于分布式计算,Flink将operator 的subtasks链化在一起形成tasks。每个task在一个线程中被执行。将operators链化在一起形成tasks是比较好的一个优化:他减少了线程和线程之间的切换和缓冲的开销,增加了吞吐量降低了延迟。对于operator的链化行为,可以根据个人来去调整。
-
StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。
-
JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。
-
ExecutionGraph:JobManager 根据 JobGraph 生成的分布式执行图,是调度层最核心的数据结构。
-
物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。
一个taskslot执行若干个subtask。一个subtask是若干个算子的chain在一起的结果。taskSlot作为一种资源隔离(CPU资源隔离除外)。
taskSlot的总数和算子的最高并行度是一致的(不过实际来看还是slot比最高并行度稍高)。一个taskSlot可以包含多个线程,每个线程对应一个subtask。注意,task不是一个执行概念,仅仅代表功能相同的subtask的集合。