flink window拖流性能

hrysbysz  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(378)

我想了解窗口如何影响flink作业的性能,我运行的flink作业由以下运算符组成:
作业并行性(4,8,16):[auto gen source]-->[map1]-->[tumbling window(10s)]-->[map2]-->[sink]
Flink窗性能eps 4p、8p、16p
高于性能的作业限制在每秒50k+,而不管我如何从4-16并行度扩展集群。
当作业窗口被删除时,作业可以达到每秒200k。
作业并行性(4-8):[auto gen source]-->[map1]-->[map2]-->[sink]
flink performance无窗口4p、8p
我已经删除了窗口的逻辑,以消除限制性能的应用程序逻辑,但似乎窗口仍然导致整个流性能下降,即使该窗口只是一个传递函数。
此屏幕截图显示没有窗口的作业和启用空窗口的作业的性能。
空窗口显示尖峰,但操作员减速
这条小溪被封顶了,不能再扩大了。在这种情况下,如何提高性能?
注意:作业没有外部服务依赖项,检查点处于关闭状态。

lrpiutwd

lrpiutwd1#

进一步的调查似乎是keyby()进入keyedstream操作造成的,当对流进行键控时,性能下降了近40%,如果有多个keyedstream,则性能会继续下降。

DataStream<Tuple2<String, MyObj>> testStream = finalizedStream
            .map(new RichMapFunction<MyObj, Tuple2<String, MyObj>>() {

                @Override
                public Tuple2<String, MyObj> map(MyObj value) throws Exception {
                    return new Tuple2<String, MyObj>(value.getCustomKey(), value);
                }
            });

    KeyedStream<Tuple2<String, MyObj>, Tuple> keyedStream = testStream.keyBy(0);
    keyedStream.map(new MapFunction<Tuple2<String, MyObj>, MyObj>() {

        @Override
        public MyObj map(Tuple2<String, MyObj> tuple) throws Exception {
            return tuple.f1;
        }
    }).name("keyed stream");

不管怎样,我能把表演做得更好吗?似乎使用键控是不可避免的。我也不知道为什么我们也尝试在我们的环境中扩展工作,性能只是限制在一个数字,而不管我们提供了多少并行性。cpu利用率和内存显示,当监视器使用nmon时,它并不处于临界状态。
如有任何意见和帮助,我们将不胜感激。

相关问题