我使用此代码执行我的测试(FLINK快速启动):
val text = env.socketTextStream("localhost", port, 'n')
// parse the data, group it, window it, and aggregate the counts
val windowCounts = text
.flatMap { w => w.split("\s") }
.map { w => WordWithCount(w, 1) }
.keyBy("word")
.timeWindow(Time.minute(15))
.sum("count")
使用此代码,我有超过65 000的输入/秒
如果我更改
timeWindow(Time.minute(15))
timeWindow(Time.minutes(15), Time.seconds(1))
我的输入少于2500
有什么方法可以在滑动窗口中具有更好的性能?
带有15分钟的翻滚窗口,每个传入事件都分配给一个窗口,而带有一个15分钟的滑动窗口,带有一个秒的幻灯片,每个传入的事件都会复制到15* 60 = 900个窗口。这显然具有性能。
根据您的应用程序要求,您可以通过使用ProcessFunction或通过实现自定义窗口逻辑来计算更少的开销所需的内容。例如,您可以将聚集成900个窗口,然后具有第二层的窗口,通过减去秒数的贡献来逐步调整15分钟的结果,并增加了最近的第二个价值。