我在4个Unix节点的分布式环境中运行Storm拓扑。
我有一个接收消息的JMSSpout,然后将它转发到ParseBolt,它将解析原始消息并创建一个对象。
为了帮助测量延迟,我的JMSSpout将当前时间作为值发出,然后当ParseBolt收到此值时,它将再次获得当前时间并将差值作为延迟。
使用这种方法,我看到200多毫秒,根本听起来不对。有没有人知道为什么会这样?
答案 0 :(得分:1)
这可能是一个线程问题。 Storm为所有spout nextTuple()调用使用相同的线程,并且处理的元组不会被处理,直到nextTuple()调用结束。还有一个非常紧凑的循环,它反复调用nextTuple()方法,如果你不在nextTuple()实现中放置至少一个短暂的睡眠,它会消耗很多周期。
尝试添加一个sleep(10)并且每个nextTuple()只发出一个元组。