如果没有输入,基于风暴持续时间 windows 应该继续执行

Storm Duration based windows should continue execution if no input

我正在研究实现 BaseStatefulWindowedBolt 的 Storm bolt,以计算来自 Kafka 的 windowed 运行 数字总和。

我用类似

的东西创建螺栓
builder.setBolt(sumBoltId, new SumBolt()).withWindow(Duration.seconds(10), 
Duration.seconds(1)).withMessageIdField("msgId")).shuffleGrouping(sourceBoltId, 
boltStreamId);

一切正常,但我注意到当来自 Kafka 的输入停止时,总和(我正在记录)缓慢下降然后停止记录。我预计它会下降,但我希望它继续处理那些 windows,即使 window 不包含元组。

因此,如果我停止数字源,我希望它会缓慢下降 10 秒,然后每秒记录总和为 0。

有没有人遇到过这个问题并找到了解决方案,或者我应该想出另一种方法来发布 windows?谢谢!

一个可能的解决方案是在 storm 中使用 tick 元组,它就像一个特殊的周期元组,可以用来向你的螺栓传达特殊的含义。 在你的情况下,你可以设置 10s 的滴答元组频率,并且在你总结了你的 Kafka 消息之后,在你的 bolt 代码中定期检测这些元组并继续求和。