目录
一、简介
Flink 将算子的 subtasks 链接成 tasks。每个 task 由一个线程执行。默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可,将算子链接成 task 是个有用的优化:它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量。
二、算子链简介
默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。允许 slot 共享有两个主要优点:
1、Flink 集群所需的 task slot 和作业中使用的最大并行度恰好一样。无需计算程序总共包含多少个 task(具有不同并行度)。
2、容易获得更好的资源利用。如果没有 slot 共享,非密集 subtask(source/map())将阻塞和密集型 subtask(window) 一样多的资源。通过 slot 共享,我们示例中的基本并行度从 2 增加到 6,可以充分利用分配的资源,同时确保繁重的 subtask 在 TaskManager 之间公平分配。
三、 算子链配置
默认情况下算子链是开启的,配置关闭
1、执行配置,所有算子关闭算子链
getExecutionEnvironment().disableOperatorChaining()
2、算子关闭算子链
addSource(consumer).disableChaining()
四、例子
source、sink 分别36个并行度,默认开启了算子链,一台task manager 设置6个slot,需要6个task manager,只要是来自于同一作业即可,将算子链接成 task 是个有用的优化,它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量。