2015-11-01 11 views
6

私たちは1つのスパウトと2つのボルトを構成した嵐のトポロジを持っています。 SpoutはDBからデータを継続的に照会し、何らかの処理のためにタプルを最初のボルトに送ります。最初のボルトは何らかの処理を行い、タプルを第2のボルトに送信して、第三者のWebサービスを呼び出し、データを送信します。だから、しばらくしてから何が起こっているのか、最後のボルトにはタプルがないので、トポロジを再起動するとうまくいきます。最後のボルトだけがここで問題になります。他の注ぎ口と最初のボルトはうまく動いていて、私は骨抜きのフレームワークを使用していません。私はこのケースではただ1人の労働者しか構成していない。Apache Storm Boltタスクはしばらくしてもメッセージを受信して​​いません

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

タイムアウトを引き起こすタプルのバックログに問題がある可能性が非常に高いです。プロセスの時間が最初のボルトの時間よりもはるかに長いように聞こえるので、2番目のボルトの並列性のヒントを増やしてみてください(2番目のボルトにバックログがある理由です)。クラスタでこのトポロジを実行している場合は、Storm UIを参照して詳細を確認してください。

+0

こんにちはクリス、私はackingフレームワークを使用していません。嵐は依然としてメッセージのタイムアウトになりますか?メッセージがタイムアウトした場合、ログを確認することができます。そして私は最後のボルトの30に平行性のヒントを与えました。 –

1

私は自分のトポロジをデバッグしていましたが、スパウトがメッセージを速く送信しているが、ボルトが処理が遅いとしましょう。この場合、メッセージはLMAX Disruptor Queueのキューに入れられます。その後、spoutタスクが空になるのを待ちます。スレッドダンプを取ると、スレッドはTIMED_WAITING状態になります。したがって、流入と流出が維持されるようにトポロジを構成する必要があります。

関連する問題