Flink分區策略

 目前Flink支持8種分區策略:

  • GlobalPartitioner: 數據會被分發到下游算子的第一個實例中進行處理。
  • ShufflePartitioner :數據會被隨機分發到下游算子的每一個實例中進行。
  • RebalancePartitioner: 數據會被循環發送到下游的每一個實例中進行處理。
  • RescalePartitioner :這種分區器會根據上下游算子的並行度,循環的方式輸出到下游算子的每個實例。這裏有點難以理解,假設上游並行度爲 2,編號爲 A 和 B。下游並行度爲 4,編號爲 1,2,3,4。那麼 A 則把數據循環發送給 1 和 2,B 則把數據循環發送給 3 和 4。假設上游並行度爲 4,編號爲 A,B,C,D。下游並行度爲 2,編號爲 1,2。那麼 A 和 B 則把數據發送給 1,C 和 D 則把數據發送給 2。
  • BroadcastPartitioner :廣播分區會將上游數據輸出到下游算子的每個實例中。適合於大數據集和小數據集做Jion的場景。
  • ForwardPartitioner:用於將記錄輸出到下游本地的算子實例。它要求上下游算子並行度一樣。簡單的說,ForwardPartitioner用來做數據的控制檯打印。​​​​​​​
  • KeyGroupStreamPartitioner :Hash 分區器。會將數據按KeyHash值輸出到下游算子實例中。​​​​
  • CustomPartitionerWrapper:用戶自定義分區器。需要用戶自己實現 Partitioner 接口,來定義自己的分區邏輯。
static class CustomPartitioner implements Partitioner<String> { 
    @Override 
    public int partition(String key, int numPartitions) { 
        switch (key){ 
            case "1": return 1;
            case "2": return 2;
            case "3": return 3;
            default : return 4;
        }
    }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章