簡體   English   中英

一段時間后,Apache Storm Bolt任務未收到消息

[英]Apache Storm Bolt task is not receiving message after some time

我們有一個風暴拓撲,我們在其中配置了一個噴口和兩個螺栓。 Spout不斷地從DB查詢數據,並將元組發送到第一個bolt進行一些處理。 第一個bolt執行一些處理並將元組發送到第二個bolt,它調用第三方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());

你很可能遇到導致超時的積壓元組問題。 嘗試增加第二個螺栓的平行度提示,因為它聽起來像一個人的處理時間比第一個螺栓的處理時間長得多(這就是為什么會有積壓進入第二個螺栓的原因)。 如果您在群集上運行此拓撲,請查看Storm UI以查看詳細信息。

伙計們,當我調試我的拓撲時,我發現如果讓我們說spout正在快速發送消息但是bolt處理速度很慢。 在這種情況下,消息將排隊LMAX Disruptor Queue。 然后spout task等待它為空。 如果你進行線程轉儲,你會發現線程處於TIMED_WAITING狀態。 因此,我們需要以保持流入和流出的方式配置拓撲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM