Flink 调度
一.调度
Flink通过Task Slots来定义执行资源。每个TaskManager有一到task slot,每个task slot可以运行一条由多个并行task组成的流水线。这样一条流水线由多个连续的task组成,比如并行度n的MapFunction和并行度为n的ReduceFunction。需要注意的是Flink经常并发执行连续task,不仅在流式作业中到处都是,在批量作业中也很常见。
一个由数据源、MapFunction和ReduceFunction组成的Flink作业,其中数据源和MapFunction的并行度为4,ReduceFunction 的并行度为3。流水线由一系列的Source - Map - Reduce组成,运行在2个TaskManager组成集群上,每个TaskManager包含3个slot
Flink 内部通过 SlotSharingGroup 和 CoLocationGroup 来定义哪些 task 可以共享一个 slot, 哪些 task 必须严格放到同一个 slot。
二.JobManager
作业执行期间,JobManager会持续跟踪各个task,决定何时调度下一个或一组task,处理已完成task或执行失败的情况。
JobManager会接收到一个JobGraph,用来描述多个算子顶点(JobVertex)组成的数据流图,以及中间结果数据(IntermediateDataSet)。每个算子都有自己的可配置属性,比如并行度和运行的代码。