我有一个Apache Storm拓扑,并且希望每隔一段时间执行一次特定的操作。我不确定如何以一种自然而优雅的方式来解决这个问题。
使用Bolt
是Spout
还是ScheduledExecutorService
,还是其他?
答案 0 :(得分:2)
Tick元组是不错的选择https://kitmenke.com/blog/2014/08/04/tick-tuples-within-storm/
编辑:这是螺栓的基本代码
@Override
public Map<String, Object> getComponentConfiguration() {
// configure how often a tick tuple will be sent to our bolt
Config conf = new Config();
conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 300);
return conf;
}
然后,您可以使用TupleUtils.isTick(tuple)
中的execute
来检查接收到的元组是否是刻度元组。
答案 1 :(得分:0)
我不知道这是否是正确的方法,但它似乎运行良好:
在prepare
的{{1}}方法的结尾,我向Bolt
添加了一个调用,其中包含以下代码:
intiScheduler()
但是请谨慎使用,因为根据设置,螺栓可能具有多个实例。