我想了解窗口如何影响Flink作业性能,我正在运行一个由以下运算符组成的flink作业:
作业并行度(4,8,16):自动生成源--> Map1 -->翻滚窗口(10s)--> Map2--> Sink
Flink windowed performance eps 4p,8p,16p
高于性能的作业上限约为每秒50k+-,无论我如何扩展集群形成4 -16个并行度。
当删除作业窗口时,作业可以达到每秒200k。
作业并行度(4-8):自动生成源--> Map1 --> Map2--> Sink
Flink performance no window 4p, 8p
我删除了窗口的逻辑,以消除性能瓶颈的应用程序逻辑,但似乎窗口仍然导致我的整个流性能下降,即使窗口只是一个直通函数。
此屏幕截图显示没有窗口的作业和启用了空窗口的作业的性能。
Empty window shows spike but operator slowed down
流已被封顶,无法进一步缩放。在这种情况下,如何提高性能?
注意:该作业没有外部服务依赖项,也没有关闭检查点。
发布于 2018-06-03 00:27:58
进一步的调查似乎是由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");
不管怎样,我能让表演变得更好?似乎使用键控是不可避免的。我不确定为什么我们要在我们的环境中尝试扩展工作,无论我们提供多少并行度,性能都被限制在一个数字上。当使用nmon进行监视时,CPU利用率和内存显示不是很关键。
任何意见和帮助都将非常感谢。
https://stackoverflow.com/questions/50580756
复制相似问题