2015-11-01 13 views
6

Wir haben eine Sturm Topologie, in der wir einen Auslauf und zwei Schrauben konfiguriert haben. Spout fragt kontinuierlich Daten aus der Datenbank ab und sendet Tupel, die für eine Verarbeitung zuerst an die Datenbank gesendet werden. Die erste Schraube verarbeitet und sendet Tupel an die zweite Schraube, die den Web-Service eines Dritten aufruft und Daten sendet. Also, was nach einiger Zeit passiert, letzte Schraube bekommt keine Tupel und wenn wir die Topologie neu starten, funktioniert es gut. Nur letzter Bolzen ist hier problematisch. Andere Tülle und erster Bolzen laufen gut, und ich benutze kein Ackerrahmen. Ich habe in diesem Fall nur einen Arbeiter konfiguriert ".Apache Storm Bolt Aufgabe erhält nach einiger Zeit keine Nachricht

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()); 

Antwort

2

Es ist ziemlich wahrscheinlich, dass Sie Probleme mit einem Rückstand von Tupeln verursacht Timeouts haben. Versuchen Sie, den Parallelitätshinweis für die 2. Schraube zu erhöhen, da es sich anhört, dass die Prozesszeit viel länger ist als die der ersten Schraube (deshalb würde es einen Rückstand in der 2. Schraube geben). Wenn Sie diese Topologie im Cluster ausführen, sehen Sie sich die Storm UI an, um die Besonderheiten zu sehen.

+0

Hallo Chris, ich benutze kein Ackerrahmen. Will storm noch die Nachricht auslaufen ?? Wenn Nachrichten eine Zeitüberschreitung haben, können wir die Protokolle überprüfen. Und ich habe einen Parallelismushinweis zu 30 der letzten Schraube gegeben. –

1

Leute, als ich meine Topologie debugging, fand ich, dass, wenn man sagen würde, Tülle Nachricht schnell sendet, aber Schraube langsam verarbeitet. In diesem Fall wird die Nachricht in die LMAX Disruptor Queue eingereiht. Warten Sie anschließend, bis die Aufgabe leer ist. Wenn Sie einen Thread-Dump ausführen, werden die Threads im Status TIMED_WAITING angezeigt. Also müssen wir die Topologie so konfigurieren, dass ihr Zu- und Abfluss erhalten bleibt.

Verwandte Themen