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来实现对时间要求非常严格的场景。

posted @ 2017-03-06 13:54  boiledwater  阅读(619)  评论(0编辑  收藏  举报