Flink的八种分区策略源码分析
| RebalancePartitioner RescalePartitioner BroadcastPartitioner ForwardPartitioner KeyGroupStreamPartitioner CustomPartitionerWrapper继承关系图 接口 名称 ChannelSelector 实现 public interface ChannelSelector<T extends IOReadableWritable> { 
 /** * 初始化channels数量,channel可以理解为下游Operator的某个实例(并行算子的某个subtask). */ void setup(int numberOfChannels); 
 /** *根据当前的record以及Channel总数, *决定应将record发送到下游哪个Channel。 *不同的分区策略会实现不同的该方法。 */ int selectChannel(T record); 
 /** *是否以广播的形式发送到下游所有的算子实例 */ boolean isBroadcast(); }抽象类 名称 StreamPartitioner 实现 public abstract class StreamPartitioner<T> implements ChannelSelector<SerializationDelegate<StreamRecord<T>>>, Serializable { private static final long serialVersionUID = 1L; 
 protected int numberOfChannels; 
 @Override public void setup(int numberOfChannels) { this.numberOfChannels = numberOfChannels; } 
 @Override public boolean isBroadcast() { return false; } 
 public abstract StreamPartitioner<T> copy(); }继承关系图 GlobalPartitioner简介 该分区器会将所有的数据都发送到下游的某个算子实例(subtask id = 0)源码解读 /** * 发送所有的数据到下游算子的第一个task(ID = 0) * @param <T> */ @Internal public class GlobalPartitioner<T> extends StreamPartitioner<T> { private static final long serialVersionUID = 1L; 
 @Override public int selectChannel(SerializationDelegate<StreamRecord<T>> record) { //只返回0,即只发送给下游算子的第一个task return 0; } 
 @Override public StreamPartitioner<T> copy() { return this; } 
 @Override public String toString() { return "GLOBAL"; } (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 



