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