Storm Emit执行延迟

时间:2014-06-03 13:57:55

标签: java apache-storm

我在4个Unix节点的分布式环境中运行Storm拓扑。

我有一个接收消息的JMSSpout,然后将它转发到ParseBolt,它将解析原始消息并创建一个对象。

为了帮助测量延迟,我的JMSSpout将当前时间作为值发出,然后当ParseBolt收到此值时,它将再次获得当前时间并将差值作为延迟。

使用这种方法,我看到200多毫秒,根本听起来不对。有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

这可能是一个线程问题。 Storm为所有spout nextTuple()调用使用相同的线程,并且处理的元组不会被处理,直到nextTuple()调用结束。还有一个非常紧凑的循环,它反复调用nextTuple()方法,如果你不在nextTuple()实现中放置至少一个短暂的睡眠,它会消耗很多周期。

尝试添加一个sleep(10)并且每个nextTuple()只发出一个元组。