Flink窗口拖动流效果

时间:2018-05-29 09:23:01

标签: apache-flink flink-streaming

我想了解窗口如何影响Flink作业的性能,我正在运行一个由运算符组成的flink作业,如下所示:

Job Parallelism(4,8,16): [auto-gen source] - > [Map1] - > [翻滚窗(10s)] - > [地图2] - > [水槽]

Flink windowed performance eps 4p,8p,16p

无论我如何根据4 -16并行度扩展群集,以上性能的工作上限约为每秒50k +。

删除作业窗口后,作业可达到每秒200k。

Job Parallelism(4-8):[auto-gen source] - > [Map1] - > [地图2] - > [沉]

Flink performance no window 4p, 8p

我删除了Window的逻辑,以消除阻碍性能的应用程序逻辑,但似乎窗口仍然导致我的整个流性能下降,即使该窗口只是一个直通功能。

此屏幕截图显示没有窗口的作业的性能,以及启用空窗口的作业。

Empty window shows spike but operator slowed down

溪流被限制,无法进一步缩放。无论如何要改善这种情况的表现?

注意:作业没有外部服务依赖关系并且检查点已关闭。

1 个答案:

答案 0 :(得分:0)

进一步调查似乎是由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进行监控时,它并不重要。

非常感谢任何输入和帮助。