Flink的八种分区策略源码分析

Flink包含8中分区策略,这8中分区策略(分区器)分别如下面所示,本文将从源码的角度一一解读每个分区器的实现方式。

  • GlobalPartitioner
  • ShufflePartitioner
  • RebalancePartitioner
  • RescalePartitioner
  • BroadcastPartitioner
  • ForwardPartitioner
  • KeyGroupStreamPartitioner
  • CustomPartitionerWrapper

继承关系图

接口

名称

ChannelSelector

实现


  1. public interface ChannelSelector<T extends IOReadableWritable> { 
  2.  
  3.     /** 
  4.      * 初始化channels数量,channel可以理解为下游Operator的某个实例(并行算子的某个subtask). 
  5.      */ 
  6.     void setup(int numberOfChannels); 
  7.  
  8.     /** 
  9.      *根据当前的record以及Channel总数, 
  10.      *决定应将record发送到下游哪个Channel。 
  11.      *不同的分区策略会实现不同的该方法。 
  12.      */ 
  13.     int selectChannel(T record); 
  14.  
  15.     /** 
  16.     *是否以广播的形式发送到下游所有的算子实例 
  17.      */ 
  18.     boolean isBroadcast(); 

抽象类

名称

StreamPartitioner

实现


  1. public abstract class StreamPartitioner<T> implements 
  2.         ChannelSelector<SerializationDelegate<StreamRecord<T>>>, Serializable { 
  3.     private static final long serialVersionUID = 1L; 
  4.  
  5.     protected int numberOfChannels; 
  6.  
  7.     @Override 
  8.     public void setup(int numberOfChannels) { 
  9.         this.numberOfChannels = numberOfChannels; 
  10.     } 
  11.  
  12.     @Override 
  13.     public boolean isBroadcast() { 
  14.         return false
  15.     } 
  16.  
  17.     public abstract StreamPartitioner<T> copy(); 

继承关系图

GlobalPartitioner

简介

该分区器会将所有的数据都发送到下游的某个算子实例(subtask id = 0)

源码解读


  1. /** 
  2.  * 发送所有的数据到下游算子的第一个task(ID = 0) 
  3.  * @param <T> 
  4.  */ 
  5. @Internal 
  6. public class GlobalPartitioner<T> extends StreamPartitioner<T> { 
  7.     private static final long serialVersionUID = 1L; 
  8.  
  9.     @Override 
  10.     public int selectChannel(SerializationDelegate<StreamRecord<T>> record) { 
  11.         //只返回0,即只发送给下游算子的第一个task 
  12.         return 0; 
  13.     } 
  14.  
  15.     @Override 
  16.     public StreamPartitioner<T> copy() { 
  17.         return this; 
  18.     } 
  19.  
  20.     @Override 
  21.     public String toString() { 
  22.         return "GLOBAL"
  23.     } 
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章