11-slot共享组 slotSharingGroup("共享组A")

一、问题引入


图-1
图-2
  • 问题引入:比较上面两张图,图1中,相同算子操作放在不同的slot中,图2中一个算子操作占用一个slot。
    如果flink window操作比较复杂,那么图2中就会出现问题,source操作抽取数据,window操作的slot来不及处理,造成数据堆积,从而导致slot的空闲浪费。

  • 解决办法:使用共享slot,一条数据从source -> transformation -> sink都在同一个slot中,当其他slot空闲时,可以共用slot来用于复杂的window计算操作。

二、slot共享组介绍

        DataStreamSource<String> dataStreamSource = env.addSource(new TubeSource());
        SingleOutputStreamOperator<Object> resultStream = dataStreamSource.flatMap().slotSharingGroup("共享组Flatmap")
                .keyBy(0).sum(1).setParallelism(2).slotSharingGroup("共享组sum");
        resultStream.print().setParallelism(1);

源码:

    @PublicEvolving
    public SingleOutputStreamOperator<T> slotSharingGroup(String slotSharingGroup) {
        transformation.setSlotSharingGroup(slotSharingGroup);
        return this;
    }

作用:共享组内的任务共享slot,不同组的任务必须占用不同的slot。
没有设置的时候默认是default共享组,所有任务共享

上述代码中,addSource占用一个slot,flatMap占用一个slot,sum和print共享slot(共享组sum)各占用一个slot,则需要提供4个slot用于计算。

所以现在算并行度方式为:先分slot共享组,3个slot共享组,sum操作和print操作可共享slot,所以sum操作需要的两个slot有一个可以用print操作分配的slot来共享。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容