我对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);
但这似乎不起作用。关于如何增加喷口超时的任何想法,以便有足够的时间来完成执行?
答案 0 :(得分:3)
那个时间(300秒)意味着一旦spout发出一个元组,拓扑有300秒处理该元组以及由于该元组而在拓扑中通过拓扑(通过三个螺栓)的所有后续元组
如果喷口发出第二个元组,但第一个螺栓仍在处理第一个元组,那么第二个元组的时钟仍在滴答作响。
这意味着您必须:
1)增加螺栓的平行度提示,以便没有积压减慢喷口发出的任何元组的处理速度,或
2)使用topology.max.spout.pending属性来限制spout在等待其中一个元组完成之前可以发出的元组数。