概念:
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。
如何划分Task:
- 并行度发生变化时;
- keyBy() /window()/apply() 等发生 Rebalance 重新分配;
- 调用 startNewChain() 方法,开启一个新的算子链;
- 调用 diableChaining()方法,即:告诉当前算子操作不使用 算子链 操作。将其单独划分,形成一个task,和其他算子不再有Operator Chains
Parallel Dataflows
上图并行数据流,一共有 3个 Task,5个 subTask。(红框代表Task,黑框代表subTask)