目前我尝试调查风暴以进行消息处理。我发现滑动窗口功能很有趣,并试图让它工作。
但即使我将间隔设置为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秒的时间间隔内等待所有消息。
答案 0 :(得分:2)
您必须使用withTumblingWindow
代替withWindow
。
withWindow
在每个输入元组上执行,并传递包含最后输入消息的输入批处理。但withTumblingWindow
将汇总所有输入消息,并提供一体化。
答案 1 :(得分:0)
我认为原因是你正在使用SlidingWindow - 它为该窗口中的每个入口和出口生成一个输出。 如果您只想在窗口末端输出一个输出,那么理想情况下应该使用批处理窗口或翻滚窗口。 总结一下: