美文网首页
11-slot共享组 slotSharingGroup("共享组

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

作者: yayooo | 来源:发表于2021-08-06 23:05 被阅读0次

    一、问题引入


    图-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来共享。

    相关文章

      网友评论

          本文标题:11-slot共享组 slotSharingGroup("共享组

          本文链接:https://www.haomeiwen.com/subject/poqadltx.html