2017-08-18 3 views
0

Bei der Verwendung von Storm 1.1.0 mit meiner Topologie stehe ich vor dem Problem, dass Storm die Bolts und Spouts neu plant oder stürzt, wenn die Topologie einen Bolt mit hoher Latenz hat.Apache Storm - Spout/Bolt mit hoher Latenz

Jetzt habe ich eine LatencyTest-Topologie zum Testen und Spielen mit diesem Problem erstellt.

Ich habe einen Ausguss, die Zufallswerte emittieren:

public void nextTuple() { 
    outputCollector.emit(new Values(Math.random())); 
} 

Und ich habe eine Schraube, die diese Werte recieves und bietet Platz für eine bestimmte Zeit.

public void execute(Tuple tuple) { 
    double input = tuple.getDouble(0); 
    try { 
     Thread.sleep(this.latencyMS); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    outputCollector.ack(tuple); 
} 

Also, wenn ich latencyMS bis 10, ich sehe, dass Sturm funktioniert "fein" (nur 2000 acked Tupeln in der Bolt) für 3 Minuten. Dann geht die Bolts-Latenz auf 60-100ms statt 10ms und Storm beginnt die Executoren neu zu "loggen" (Nimbus einloggen). Dann werden alle Statistiken in der Benutzeroberfläche werden auf 0.

Image 1: No Crash and 2000 Tuples acked with high latency

Image 2: Crashed an no information in the UI

Da ich mit Dateien in den Ausguss meiner realen Topologie arbeite, ist es nicht akzeptabel, diese wieder zu öffnen.

Ich spielte mit einigen Timeout-Werten in meinem storm.yaml und mit dem "config.setMaxSpoutPending (200);" Option, aber nichts scheint etwas zu bewirken. Ich verwende einen 3-Node-Zookeeper-Cluster und einen 5-Knoten-Storm-Cluster für diesen Test.

Haben Sie irgendwelche Ideen, wie Sie das lösen oder verstehen können? Ich brauche Storm, auch wenn die Latenz sehr hoch ist.

Antwort

0

MaxSpoutPending ist keine Timeout-Konfiguration, was Sie konfigurieren sollten ist topology.message.timeout.

Verwandte Themen