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"; } (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |