2014-12-30 101 views
2

我對Storm比較陌生,我試圖創建一個拓撲,它將接收文件,解析內容,然後運行第三方API對該內容進行一些分析。Apache Storm bolt可能會超時

我有一個拓撲結構,一個噴口和三個螺栓。基本上,噴口將文件提供給將提取文件內容的第一個螺栓。然後第二個螺栓將運行第三方分析,最後一個螺栓將所有內容寫入xml字符串表示形式。

我測試了前兩個螺栓按預期工作,但問題出現在我添加最後一個螺栓時。看起來第二個螺栓需要很長時間才能運行,Storm正在超時。第三方代碼的執行時間大約需要37秒。 30秒後,我一直在閱讀這篇文章,Storm會超時並且失敗。

我一直在日誌中看到的是:

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

我試圖用設置我的拓撲類TOPOLOGY_MESSAGE_TIMEOUT_SEC配置如下:

conf.setMessageTimeoutSecs(300); 

,但似乎並沒有工作。有關如何增加噴口超時的任何想法,以便可以給予足夠的時間來完成執行?

+0

所以我設法得到它在一定程度上工作,但我通過增加的Thread.sleep(90000)做的;我不知道爲什麼這個工作或者設置這個的適當時間。 – medium

+0

有沒有辦法在日誌中查找超時消息。即使我面臨同樣的問題,也無法找到這樣的信息。 –

回答

3

即時間(300秒)意味着一旦一個元組由噴口射出,拓撲擁有300秒來處理該元組和所有後續元組通過拓撲(通過三個螺栓)紋波的一個結果元組。

如果噴口發射第二元組,但第一螺栓仍在處理第一元組,時鐘滴答仍然對於第二元組。

這意味着你要麼必須:

1)提高並行暗示用於螺栓,使得沒有積壓減緩用於通過噴口排放的任何元組的處理,或者

2)使用topology.max.spout.pending屬性來限制噴口在等待其中一個元組完成之前可以發出的元組數量。

+0

所以如果我去選項2,你會推薦設置toplogy.max.spout.pending = 1嗎? – medium

+0

每條線都通過拓撲進行處理還是有一些聚合?任何螺栓可以並行運行多個實例嗎? –

+0

沒有聚合,是的多個實例可以並行運行。我在本地運行這一切,我懷疑這是我的問題發生的地方。如上面的評論中提及,如果我增加了Thread.sleep(10000)到了Thread.sleep(40000),在我的拓撲類的工作。我只是不確定這是在做什麼。 – medium