风暴滑动窗口方法

时间:2016-05-27 12:55:30

标签: apache-storm sliding-window

目前我尝试调查风暴以进行消息处理。我发现滑动窗口功能很有趣,并试图让它工作。

但即使我将间隔设置为5秒钟,窗口后面的计算也会更加频繁。似乎每个新消息都会执行元组窗口的执行方法。

builder.setBolt("messageCountBolt",
                new MessageCountBolt()
                        .withWindow(
                                new BaseWindowedBolt.Duration(20, TimeUnit.SECONDS),
                                new BaseWindowedBolt.Duration(5, TimeUnit.SECONDS))
                        .withMessageIdField("id")
                        .withTimestampField("timeStamp")
                        .withLag(new BaseWindowedBolt.Duration(5, TimeUnit.SECONDS)),
                1).globalGrouping("spout");

有人知道为什么?我希望计算在5秒的时间间隔内等待所有消息。

2 个答案:

答案 0 :(得分:2)

您必须使用withTumblingWindow代替withWindow

withWindow在每个输入元组上执行,并传递包含最后输入消息的输入批处理。但withTumblingWindow将汇总所有输入消息,并提供一体化。

答案 1 :(得分:0)

我认为原因是你正在使用SlidingWindow - 它为该窗口中的每个入口和出口生成一个输出。 如果您只想在窗口末端输出一个输出,那么理想情况下应该使用批处理窗口或翻滚窗口。 总结一下:

  • 滑动窗口:在给定时间窗口内保留每个事件,在添加或删除新事件时生成输出。
  • 批处理窗口:也称为翻滚窗口,它们仅在时间窗口结束时生成输出。