Storm之tickTuple
tickTuple是Storm中引入的一种定时机制,利用tickTuple能够实现间隔一段时间进行某种处理的逻辑。
在boltA中实现tickTuple注册的方法如下
@Override
public Map<String, Object> getComponentConfiguration() {
Config conf = new Config();
conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 3);
return conf;
}
这样,boltA的实例都会每隔3秒钟收到一个tickTuple。
如果在boltB中又进行了如下的设置
@Override
public Map<String, Object> getComponentConfiguration() {
Config conf = new Config();
conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 5);
return conf;
}
这样,boltB的实例每隔5秒钟会收到一个tickTuple。
boltA和boltB的两个tickTuple流不会相互影响。
还可以在全局中设置topology自己的tickTuple。
例如进行如下设置,
<property>
<name>topology.tick.tuple.freq.secs</name>
<value>1</value>
</property>
</properties>
这样,topology中所有的bolt都会收到tickTuple。
如上,如果bolt本身和topology都进行了设置,则bolt本身设置的优先级高,即不会收到1秒每个的tickTuple,如果仅仅是topology进行了设置,但是bolt没有设置,则每个bolt都会每秒收到一个tickTuple。
另外,tickTuple是基于秒级的间隔,一般正常情况下,多有毫秒级的波动,但是在特殊情况下,tickTuple流也会有积压,所以不能用tickTuple来实现对时间要求非常严格的场景。