Wenn Sie mehr Daten an Kafka senden, sollte Spark eine Ausgabe auslösen. Das aktuelle Verhalten ist total wegen der internen Implementierung.
Wenn Sie einige Daten übertragen, generiert StreamingQuery einen auszuführenden Stapel. Wenn dieser Stapel abgeschlossen ist, wird die maximale Ereigniszeit in diesem Stapel gespeichert. Dann in der nächsten Charge, Da Sie %code% mode verwenden, verwendet StreamingQuery die maximale Ereigniszeit und das Wasserzeichen, um alte Werte aus StateStore zu entfernen und auszugeben. Daher müssen Sie sicherstellen, dass mindestens zwei Stapel generiert werden, damit die Ausgabe angezeigt wird.
Hier ist meine beste Schätzung:
Append-Modus gibt nur die Daten aus, nachdem das Wasserzeichen abgelaufen ist (z. B. in diesem Fall 1 Minute später). Sie haben keinen Trigger festgelegt (z. B. %code% ). Standardmäßig werden die Stapel so schnell wie möglich ausgegeben. Also sollten in der ersten Minute alle Ihre Chargen leer sein, und die erste Charge nach einer Minute sollte etwas Inhalt enthalten.
Eine andere Möglichkeit ist, dass Sie %code% anstelle von %code% verwenden. Ich glaube, Wasserzeichen sollen mit Zeitfenstern oder mapGroupsWithState verwendet werden, also bin ich nicht so, wie die Interaktion in diesem Fall funktioniert.
Ich benutze Spark 2.2.0-rc1.
Ich habe eine Kafka %code% , die eine laufende mit Wasserzeichen versehene Aggregation abfragt, mit einem %code% -Wasserzeichen, das an %code% mit %code% output mode ausgegeben wird.
%Vor%Ich dränge folgende Daten in Kafka %code% :
%Vor%Und ich bekomme folgende Ausgabe:
%Vor%Ist das erwartetes Verhalten?