控制任务调度
Flink可以将算子划分为不同的任务,并且将这些任务分配到集群的不同工作进程上,那么任务之间的距离就是影响性能的主要原因.
首先是任务之间的链接,可以将多个算子的并行任务融合在一起,在同一个线程中执行,这样彼此的数据交换就是线程内操作,根本不涉及上下文切换等通信成本.
虽然Flink默认将链接进行开启,但是有些负载很高的任务,可能不建议进行链接,而是将其进行拆开,在不同的处理槽内执行,
那么让任务链接不生效的方式很多种,粗力度来说是可以完全禁用任务内任务链接
StreamExecutionEnvironment.disableOperatorChaining()
这样每个任务都不会与其他的任务进行链接
或者使用disableChaining()来禁止链接功能,让算子的任务不会和前后的其他任务进行链接.
代码会生成三个任务,一个Filter+map1链接
一个Map2的单独任务,和一个Filter2的任务
或者使用startNewChain()方法,为指定的算子开启一个新的链接.
这样的任务就会存在两个,一个是由Filter1和Map1组成,另一个由Map2和Filter2组成.
其次我们简要说下Flink的处理槽共享组
其含义在于如果不是一个共享处理槽的任务,就不会存在于放在一个处理槽中
比如下面代码
上面讲五个算子,分配到了green yellow blue中,那么他们的映射关系为
一共需要10个处理槽,blue和green处理槽最大并行度为4,故分别需要4个,yellow则需要两个