2015-11-01 163 views
6

我們有一個風暴拓撲,我們在其中配置了一個噴嘴和兩個螺栓。 Spout不斷從數據庫中查詢數據,並將它發送給第一個螺栓進行一些處理。第一個螺栓執行一些處理並將元組發送到第二個螺栓,該螺栓調用第三方Web服務併發送數據。所以,在一段時間後發生了什麼,最後一個螺栓沒有得到任何元組,如果我們重新啓動拓撲,它工作正常。這裏只有最後一個螺栓出現問題。其他噴口和第一個螺栓運行良好,我不使用acking框架。在這種情況下,我只配置了一名工人。阿帕奇風暴螺栓任務在一段時間後沒有收到消息

TopologyBuilder builder = new TopologyBuilder(); 
    builder.setSpout("messageListenrSpout", new MessageListenerSpout(), 1); 
    builder.setBolt("processorBolt", new ProcessorBolt(), 20).shuffleGrouping("messageListenrSpout"); 
    builder.setBolt("notifierBolt", new NotifierBolt(),40).shuffleGrouping("processorBolt"); 
    Config conf = new Config(); 
     conf.put(Config.TOPOLOGY_SLEEP_SPOUT_WAIT_STRATEGY_TIME_MS, 10000); 
     //conf.setMessageTimeoutSecs(600); 
     conf.setDebug(true); 
     StormSubmitter.submitTopology(TOPOLOGY, conf, builder.createTopology()); 

回答

2

這很可能是因爲導致超時的元組積壓問題。嘗試增加第二個螺栓的平行度提示,因爲它聽起來像一個人的加工時間比第一個螺栓要長得多(這就是爲什麼第二個螺栓會有積壓)。如果您在羣集上運行此拓撲,請查看Storm UI以查看具體信息。

+0

嗨克里斯,我沒有使用acking框架。風暴還會超時嗎?如果郵件超時,我們可以在哪裏檢查日誌。我已經給出了最後一個螺栓的30個平行度提示。 –

1

當我調試我的拓撲結構時,我發現如果讓噴嘴快速發送消息但螺栓處理速度很慢。在這種情況下,消息將在LMAX Disruptor隊列中排隊。然後噴嘴任務等待它爲空。如果你進行線程轉儲,你會發現線程處於TIMED_WAITING狀態。所以,我們需要以保持流入和流出的方式來配置拓撲結構。