Ich habe ein paar Fragen bezüglich der Parallelität von flink. Das ist mein Setup:Apache Flink: Wie parallel ausgeführt wird, aber Reihenfolge der Nachrichten beibehalten?
Ich habe 1 Master-Knoten und 2 Slaves. In flink habe ich 3 Kafka-Konsumenten erstellt, die jeweils aus einem anderen Thema konsumieren.
Da die Reihenfolge der Elemente für mich wichtig ist, hat jedes Thema nur eine Partition und ich habe flink eingerichtet, um die Ereigniszeit zu verwenden.
Dann laufe ich die folgende Pipeline (in Pseudo-Code) auf jeder der Datenströme:
source
.map(deserialize)
.window
.apply
.map(serialize)
.writeTo(sink)
Bis jetzt habe ich mein flink Programm mit dem Argument gestartet -p 2
davon aus, dass dies würde mir erlauben, beide zu verwenden meiner Knoten. Das Ergebnis ist nicht das, was ich mir erhofft habe, da die Reihenfolge meiner Ausgabe manchmal durcheinander ist.
Nachdem durch die flink Dokumentation zu lesen und besser versuchen, es zu verstehen, könnte meinen folgenden „Learnings"?
1.) bestätigt -p 2
Passing konfiguriert die Task-Parallelität eines nur jemand bitte, dh die maximale Anzahl der parallelen Instanzen Aufgabe (wie map(deserialize)
) wird in aufgeteilt werden. Wenn ich die Reihenfolge durch die gesamte Pipeline halten möchte, muss ich -p 1
.
2.) Dies scheint mir widersprüchlich/verwirrend: auch wenn die Parallelität eingestellt ist 1, verschiedene Aufgaben können parallel (gleichzeitig) ausgeführt werden, daher werden meine 3 Pipelines auch in pa ausgeführt Parallel wenn ich -p 1
passiere.
Und als Follow-up-Frage: Gibt es eine Möglichkeit herauszufinden, welche Aufgaben zu welchem Task-Slot zugeordnet wurden, so dass ich die parallele Ausführung selbst bestätigen konnte?
Ich würde jede Eingabe schätzen!
aktualisieren
Here ist Ausführungsplan des flink für -p 2
.
Ich habe den Ausführungsplan meines Flink-Programms hochgeladen und dort können Sie sehen, dass vor der letzten Karte eine Neuverteilung erfolgt. Laut [this] (https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/programming-model.html#parallel-dataflows) flink docs ist die Reihenfolge nicht garantiert mit Rebalance (). Ich nehme an, dass es beim Schreiben auf Kafka zwischen den beiden Teilaufgaben Race-Bedingungen gibt, die meine Output-Reihenfolge durcheinander bringen. Daher glaube ich, dass Parallelismus> 1 meine Ergebnisse durcheinander bringt. – BenScape