Schauen Sie sich das example:Warum wird nur eine Instanz von GlobalWindow verwendet?
// We create sessions for each id with max timeout of 3 time units
DataStream<Tuple3<String, Long, Integer>> aggregated = source
.keyBy(0)
.window(GlobalWindows.create())
.trigger(new SessionTrigger(3L))
.sum(2);
Kann mir jemand erklären, warum in diesem Beispiel eine Instanz GlobalWindow
(innen GlobalWindows#assignWindows
erstellt) verwenden?
Scheint, wie für alle eingehenden Ereignis-IDs sollten eigene Fenster dh Window(a)
für a
Ereignis, Window(b)
für b
Ereignis erstellt werden, usw., weil, wie ich Flink verstehen Instanzen Fenster für Mitarbeiter mit Ereignissen entsprachen, dh alle a
Ereignissen zugeordnet werden soll mit Window(a)
zum Beispiel. In diesem Fall werden nur alle a
Ereignisse, die mit Window(a)
verknüpft sind, an die Fensterfunktion übergeben und zusammen verarbeitet (in diesem Beispiel wird die Anzahl der Ereignisse nach ID gruppiert, dh nach a
, b
usw.), aber wie Sie dieses Beispiel sehen können eine Instanz von GlobalWindow
.
Von der https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/windows.html heißt es "Ein globaler Windows-Assigner weist alle Elemente mit dem gleichen Schlüssel zu einzelnes globales Fenster. ", wenn also 10 verschiedene Schlüssel vorhanden sind, würde es 10 verschiedene globale Fenster generieren? –
Semantisch haben Sie für jeden Schlüssel ein anderes Fenster. Implementationsgemäß ist die Fensterinstanz für alle Schlüssel gleich. Der Grund dafür ist, dass die Fensterinstanz einen zusammengesetzten Schlüssel mit dem Schlüsselwert bildet, um die Fensterelemente eindeutig zu identifizieren. –
Dies ist nur für globale Windows, oder? Für das Zeitfenster hätten 10 verschiedene Schlüssel 10 verschiedene Zeitfenster-Instanzen, sogar aus der Implementierungsperspektive, richtig? Bitte korrigiere mich, wenn ich falsch liege. –