加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

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

发布时间:2021-05-23 20:06:21 所属栏目:教程 来源:互联网
导读:Flink包含8中分区策略,这8中分区策略(分区器)分别如下面所示,本文将从源码的角度一一解读每个分区器的实现方式。 GlobalPartitioner ShufflePartitioner Rebal

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"; 

    } 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读