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:是自定義分區器

相關文章
相關標籤/搜索