流分区器,在流进行转换后,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:是自定义分区器