任务提交
我们在提交flink job时,一个flink job 会对应一个job manager
并行度(parallelism)
并行度是指flink任务在运行时算子运行时子任务的多少一般可以看做是有多大的并行度,包含并行子任务的数据流就是并行数据流,它需要多个分区来分配并行任务。一般情况,并行度是指整个任务运行过程中,并行度最大的算子。(任务提交时 -p 指定并行度),优先级:
conf配置《 任务提交参数指定《 代码全局设定并行度 《 算子指定并行性度
算子链(operator chain)
- 一对一(one-to-one, forwarding)
算子将传递不需要重新分区,也不需要调整数据的顺序。 - 重分区(redistributing)
比如keyBy这种,除了forward其他都是重分区
并行度相同的one-to-one的相邻算子可以进行算子链合并,降低子任务数,减少任务间跨线程次数。
- 全局禁用算子链:env.disableOperatorChaining();
- 某个算子不参与链化 算子A.disableChaining()
- 从某个算子开始新链条:算子A.startNewChain()
任务槽(Task Slots)
Flink中每一个TaskManager都是一个JVM进程,可以启动多个独立线程,来并行执行多个子任务(subtask),每个任务槽(task slot)起始表示了TaskMananger 拥有计算资源的一个固定大小的子集,成为任务槽。如果一个taskManager有三个slot,它将会把管理的内存均分为三份,每个slot独占一份。
同一个作业中,不同任务节点的并行子任务可以放在同一个slot上执行(前提:属于同一个slot共享组)。
slot和并行度关系:任务槽是静态概念,是指TaskManager并行执行的能力,表示最大的并发上限,而并行度是动态概念,实际执行时的并行情况,在实际运行中占用了几个。