流分區器,在流進行轉換後,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:是自定義分區器