又看了一下RollingTopWords,让我比较关注的地方是在RollingCountBolt类里,是通过方法TupleHelpers.isTickTuple(tuple)来判断是否应该发射当前窗口数据,但是判断的依据一开始让我很迷惑,居然是判断该tuple是否来源于“__system”的组件和“__tick”流。
作为对storm了解不多的人,我真的糊涂了,tuple不都是上游的spout发射来的吗,哪里冒出来源不同的tuple。
好吧,我就开始猜了,莫非有个隐藏的spout?或者RollingCountBolt自己给自己发什么特殊的tuple。
正毫无头绪时,奇迹出现了,我把鼠标移到Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS这个常量上时,出现了一行小提示:
How often a tick tuple from the "__system" component and "__tick" stream should be sent to tasks. Meant to be used as a component-specific configuration.
哦,在方法getComponentConfiguration() 里
conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, emitFrequencyInSeconds);
这句话告诉系统,需要按照emitFrequencyInSeconds的频率,产生来源于“__system”的组件和“__tick”流的tuple给task。
好了,这就是RollingTopWords中,定时产生特殊tuple的方法,对于我这种新手,算是又有点进步了。
作为对storm了解不多的人,我真的糊涂了,tuple不都是上游的spout发射来的吗,哪里冒出来源不同的tuple。
好吧,我就开始猜了,莫非有个隐藏的spout?或者RollingCountBolt自己给自己发什么特殊的tuple。
正毫无头绪时,奇迹出现了,我把鼠标移到Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS这个常量上时,出现了一行小提示:
How often a tick tuple from the "__system" component and "__tick" stream should be sent to tasks. Meant to be used as a component-specific configuration.
哦,在方法getComponentConfiguration() 里
conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, emitFrequencyInSeconds);
这句话告诉系统,需要按照emitFrequencyInSeconds的频率,产生来源于“__system”的组件和“__tick”流的tuple给task。
好了,这就是RollingTopWords中,定时产生特殊tuple的方法,对于我这种新手,算是又有点进步了。