4

Einige Systeme wie StreamScope erfordern, dass Funktionen deterministisch sind (ebenso wie die Reihenfolge, in der sie verarbeitet werden), weil jede Nachricht ihre Sequenznummer in einem Stream hat. Im Falle von Fehlern wird diese Folgenummer verwendet, um zu bestimmen, ob ein Ereignis neu berechnet werden sollte oder nicht (weil es vom Datenstrom beibehalten wurde), und damit die nachgeordneten Knoten die gleichen Ereignisse nicht zweimal berechnen.Nichtdeterministische Funktionen in der Stream-Verarbeitung

Benötigen Flink, Spark-Streaming, Kafka-Streams und Storm auch Funktionen, um deterministisch zu sein?

Antwort

3

Ja und nein. Es hängt davon ab;)

Die Frameworks zwingen Sie nicht, deterministische Funktionen bereitzustellen.

Im Falle eines Fehlers werden einige Teile Ihrer Eingabedaten neu berechnet. Zwischenergebnis wird verworfen. Daher kann das neu erzeugte Zwischenergebnis vom vorherigen (vor dem Fehler) abweichen, wenn Sie nicht-deterministische Funktionen verwenden. Wenn Sie sich jedoch nicht darum kümmern, ist es in Ordnung, Nicht-Determinismus zu verwenden.

Außerdem hängt es von der Semantik ab, die Sie verwenden.

Flink/Storm (Trident)/Funken (genau einmal Verarbeitung):

  • Flink offeres exaclty einmal nur für bestimmte Quellen und Senken
  • für diese, werden einige Ausgaben gelöscht und in neu berechnet werden Fall des Scheiterns
    • Flink zum Beispiel kann eine Datei abschneiden. Sie sollten also sicherstellen, dass die Verbraucherausgabe nicht zu einem späteren Zeitpunkt wieder rückgängig gemacht wird (oder Sie interessieren sich vielleicht nicht ...)
  • Spark/Storm Micro-Batching verhindert automatisch, dass nachgeschaltete Verbraucher nicht festgeschriebene Ausgaben lesen automatisch (ich denke, für einige Waschbecken, Flink das gleiche tut)

Flink/Sturm/Kafka-Streams (at-dest einmal die Verarbeitung):

  • , wenn Sie mit bei der kleinsten einmal ausgeführt Verarbeitung Semantik im Falle eines Fehlers, erhalten Sie einige Duplikate in Ihrer Ausgabe. Wenn Sie also nicht-deterministische Funktionen verwenden, haben diese "Duplikate" möglicherweise andere Werte (aufgrund von Nicht-Determinismus).