控制任务调度

Flink可以将算子划分为不同的任务,并且将这些任务分配到集群的不同工作进程上,那么任务之间的距离就是影响性能的主要原因.

首先是任务之间的链接,可以将多个算子的并行任务融合在一起,在同一个线程中执行,这样彼此的数据交换就是线程内操作,根本不涉及上下文切换等通信成本.

虽然Flink默认将链接进行开启,但是有些负载很高的任务,可能不建议进行链接,而是将其进行拆开,在不同的处理槽内执行,

那么让任务链接不生效的方式很多种,粗力度来说是可以完全禁用任务内任务链接

StreamExecutionEnvironment.disableOperatorChaining()

这样每个任务都不会与其他的任务进行链接

或者使用disableChaining()来禁止链接功能,让算子的任务不会和前后的其他任务进行链接.

图片

代码会生成三个任务,一个Filter+map1链接

一个Map2的单独任务,和一个Filter2的任务

或者使用startNewChain()方法,为指定的算子开启一个新的链接.

图片

这样的任务就会存在两个,一个是由Filter1和Map1组成,另一个由Map2和Filter2组成.

其次我们简要说下Flink的处理槽共享组

其含义在于如果不是一个共享处理槽的任务,就不会存在于放在一个处理槽中

比如下面代码

图片

上面讲五个算子,分配到了green yellow blue中,那么他们的映射关系为

图片

一共需要10个处理槽,blue和green处理槽最大并行度为4,故分别需要4个,yellow则需要两个

发表评论

邮箱地址不会被公开。 必填项已用*标注