风暴中具有计数和持续时间的翻滚窗口

时间:2018-06-27 13:04:34

标签: java time count window apache-storm

如何在Storm中创建翻转窗口具有两个阈值。例如,如果我将WindowCount设置为500,而WindowDuration设置为5秒,则即使消息少于500条但经过了5秒,窗口也应得到处理。我可以看到两种功能的独立API

计数

.tumblingWindow(1000, windowStoreFactory, new Fields("word"), new CountAsAggregator(), new Fields("count"))

时间

.tumblingWindow(Duration.seconds(5), windowStoreFactory, new Fields("word"), new CountAsAggregator(), new Fields("count"))

我可以同时使用两者吗?

如果我是通过MessageCount而不是Duration进行配置的,那么当我停止拓扑时,消息将如何处理?即使未收到批次计数,Storm也会处理这些消息吗?还是我会丢失这些消息?

1 个答案:

答案 0 :(得分:1)

我不相信您可以使用当前的窗口API来执行此操作。

该代码可插入,足以在内部使用,但未公开所需的API。有两个界面可以定义窗口的处理方式。

TriggerPolicy决定何时向螺栓传递窗口(例如,“在缓冲100个元组时传递”)。

EvictionPolicy决定何时从当前窗口中退出元组(例如,“在元组比窗口中最新元组落后500个元组时,丢弃元组”)。

您可以通过以下方式间接配置这些策略: BaseWindowedBolt.withWindowLength,在内部仅设置一些配置属性。这些属性用于确定WindowedBoltExecutor中的触发/驱逐策略。

我认为所需要的是要么允许用户提供自己的自定义TriggerPolicy / EvictionPolicy,要么添加新的Trigger / EvictionPolicy来满足您的需求。

如果您要为此提出疑问,可以在https://issues.apache.org/jira/projects/STORM上提出。如果您想贡献代码,可以在https://github.com/apache/storm处获得源代码,也可以在此处提高PR。