Apache Storm bolt可能会超时

时间:2014-12-30 18:55:25

标签: java hadoop apache-storm

我对Storm相对较新,我正在尝试创建一个拓扑,该拓扑将接收文件,解析内容,然后运行第三方API对该内容进行一些分析。

我有一个拓扑,一个喷口和三个螺栓。基本上,spout将文件提供给第一个将提取文件内容的bolt。然后第二个螺栓将运行第三方分析,最后一个螺栓将所有内容写入xml字符串表示。

我已经测试过前两个螺栓是按预期工作的,但是当我添加最后一个螺栓时出现问题。似乎第二个螺栓需要很长时间才能运行而Storm会超时。第三方代码的执行时间大约需要37秒。我一直在读,30秒后风暴将超时喷出并失败。

我在日志中一直看到这个:

  17580 [Thread-9-disruptor-executor[3 3]-send-queue] INFO  backtype.storm.util - Async loop interrupted!

我试图使用以下内容在拓扑类中设置我的TOPOLOGY_MESSAGE_TIMEOUT_SEC配置:

conf.setMessageTimeoutSecs(300);   

但这似乎不起作用。关于如何增加喷口超时的任何想法,以便有足够的时间来完成执行?

1 个答案:

答案 0 :(得分:3)

那个时间(300秒)意味着一旦spout发出一个元组,拓扑有300秒处理该元组以及由于该元组而在拓扑中通过拓扑(通过三个螺栓)的所有后续元组

如果喷口发出第二个元组,但第一个螺栓仍在处理第一个元组,那么第二个元组的时钟仍在滴答作响。

这意味着您必须:

1)增加螺栓的平行度提示,以便没有积压减慢喷口发出的任何元组的处理速度,或

2)使用topology.max.spout.pending属性来限制spout在等待其中一个元组完成之前可以发出的元组数。