我想了解窗口如何影响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
溪流被限制,无法进一步缩放。无论如何要改善这种情况的表现?
注意:作业没有外部服务依赖关系并且检查点已关闭。
答案 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进行监控时,它并不重要。
非常感谢任何输入和帮助。