在Flink中滑动Windows的坏Perf

时间:2017-09-13 15:24:43

标签: scala apache-flink flink-streaming

我使用此代码执行测试(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获得更好的性能?

1 个答案:

答案 0 :(得分:4)

使用15分钟的翻滚窗口,每个传入的事件被分配到一个窗口,而使用15分钟的滑动窗口和一秒的幻灯片,每个传入的事件被复制到15 * 60 = 900个窗口。这显然会对性能产生影响。

根据您的应用程序要求,您可以通过使用ProcessFunction或实现自定义窗口逻辑来以更少的开销计算所需内容。例如,你可以预先聚合到900秒的窗口,然后有第二层窗口,通过减去过期的第二个对总数的贡献来逐步调整15分钟的结果,并加上最近的第二个值。