task之间传输数据方式、操作链和任务槽
task之间传输数据方式
task之间数据传递有四种方式
- forward strategy
- key-based strategy
- broadcast strategy
- random strategy
forward strategy
即转发策略: 一个task的输出只发送给一个task作为输入
优点
- 如果两个task都在一个JVM中的话,那么就可以避免网络开销
key-based strategy
即基于键值的策略
- 数据需要按照某个属性(我们称为 key)进行分组(或者说分区)
- 相同key的数据需要传输给同一个task,在一个task中进行处理
broadcast strategy
即广播策略
- 数据随机的从一个task中传输给下一个operator所有的subtask。因为这种策略涉及数据复制和网络通信,所以成本相当高。
random strategy
即随机策略
- 数据随机的从一个task中传输给下一个operator所有的subtask
- 保证数据能均匀的传输给所有的subtask,以便在任务之间均匀地分配负载
注意
转发与随机策略是基于key-based策略的;转发策略和随机策略也可以看作是基于键的策略的变体,其中前者保存上游元组的键,而后者执行键的随机重新分配
操作链
操作链即任务链(不同场景下称呼不同)是将相关性很强的transformation操作绑定在一起,这样能够让转换过程中上下游的 Task 在同一个 Pipeline 中执行,进而避免因为数据在网络或者线程间传输导致的开销,提高整体的吞吐量和延迟。
如下图所示:将身处同一个TaskManager的key agg
和sink
绑定到一起。从而使原来的4个task变为2个task