Arbeiten mit einer Streaming-unbegrenzten PCollection in Google Dataflow, die aus einem Cloud PubSub-Abonnement stammt. Wir verwenden dies als Firehose, um Events einfach an BigTable zu liefern. Alles mit der Lieferung funktioniert gut.Cloud-Datenfluss: Nebeneffekt bei fortschreitendem Wasserzeichen
Unser Problem ist, dass wir nachgelagerte Batch-Jobs haben, die erwarten, dass sie einen Tag lang Daten aus BigTable auslesen, sobald sie ausgeliefert sind. Ich würde gerne Fensterung und Triggerung verwenden, um einen Nebeneffekt zu implementieren, der eine Markierzeile nach bigtable schreibt, wenn das Wasserzeichen über den Tagesschwellenwert hinausgeht, was darauf hinweist, dass der Datenfluss Grund zu der Annahme hat, dass die meisten Ereignisse geliefert wurden. t brauchen starke Garantien auf Vollständigkeit, nur vernünftige) und dass die Downstream-Verarbeitung beginnen kann.
Wir haben versucht, die rohen Ereignisse als eine Senke in der Pipeline zu schreiben, und dann Fenster in eine andere Senke unter Verwendung the timing information in the pane, um festzustellen, ob das Wasserzeichen fortgeschritten ist. Das Problem bei diesem Ansatz besteht darin, dass er erneut auf die rohen Ereignisse selbst einwirkt, was unerwünscht ist, da es das Schreiben der Ereigniszeilen wiederholen würde. Wir können dieses Schreiben verhindern, aber der parallele Pfad in der Pipeline würde immer noch über die gefensterten Ströme von Ereignissen arbeiten.
Gibt es eine effektive Möglichkeit, einen Rückruf an das Wasserzeichen anzuhängen, sodass wir eine einzige Aktion ausführen können, wenn das Wasserzeichen vorrückt?