flink系列(6)-流分区器partition分析

流分区器,在流进行转换后,flink经过分区器精确控制数据的流向,下图是flink提供的全部的全部的分区器算法

能够发现全部的partition都须要实现StreamPartitioner接口和ChannelSelector的接口app

其中ForwardPartitioner和GlobalPartitioner两个实现器基本同样,是将记录转发给在本地运行的下游的(归属于subtask)的operationblog

ShufflePartitioner是随机选择一个channel接口

RebalancePartitioner实现了一个轮询分区算法it

BroadcastPartitioner是将数据发往下游全部节点io

RescalPartitioner是经过轮询的方式发往下游ast

针对这个进行一些说明:channel

上游操做所发送的元素被分区到下游操做的哪些子集,依赖于上游和下游操做的并行度。例如,若是上游操做的并行度为2,而下游操做的并行度为4,那么一个上游操做会分发元素给两个下游操做,同时另外一个上游操做会分发给另两个下游操做。相反的,若是下游操做的并行度为2,而上游操做的并行度为4,那么两个上游操做会分发数据给一个下游操做,同时另两个上游操做会分发数据给另外一个下游操做。在上下游的并行度不是呈倍数关系的状况下,下游操做会有数量不一样的来自上游操做的输入
KeyGroupStreamPartitioner:经过记录的数据值得到分区key,经过以下公式并行

keyGroupId * parallelism / maxParallelism

计算出最终的channelim

CustomPartitionerWrapper:是自定义分区器

相关文章
相关标签/搜索