我使用此代码执行测试(Flink Quick Start):
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))
我的输入/借调少于2 500
有没有办法通过Sliding Windows获得更好的性能?
答案 0 :(得分:4)
使用15分钟的翻滚窗口,每个传入的事件被分配到一个窗口,而使用15分钟的滑动窗口和一秒的幻灯片,每个传入的事件被复制到15 * 60 = 900个窗口。这显然会对性能产生影响。
根据您的应用程序要求,您可以通过使用ProcessFunction或实现自定义窗口逻辑来以更少的开销计算所需内容。例如,你可以预先聚合到900秒的窗口,然后有第二层窗口,通过减去过期的第二个对总数的贡献来逐步调整15分钟的结果,并加上最近的第二个值。