Streamingpipelines

Unbegrenzte PCollections oder unbegrenzte Sammlungen stellen Daten in Streaming-Pipelines dar. Eine unbegrenzte Sammlung enthält Daten aus einer kontinuierlich aktualisierten Datenquelle wie z. B. Pub/Sub.

Sie können einen Schlüssel nicht zum Gruppieren von Elementen in einer unbegrenzten Sammlung verwenden. Es kann unendlich viele Elemente für einen bestimmten Schlüssel in Streaming-Daten geben, da die Datenquelle ständig neue Elemente hinzufügt. Mit Fenstern, Wasserzeichen und Triggern können Sie Elemente in unbegrenzten Sammlungen zusammenfassen.

Das Fensterkonzept gilt auch für begrenzte PCollections, die Daten in Batch-Pipelines darstellen. Informationen zum Windowing in Batch-Pipelines finden Sie in der Apache Beam-Dokumentation zum Windowing mit begrenzten PCollections.

Fenster und Fensterfunktionen

Fensterfunktionen teilen unbegrenzte Sammlungen in logische Komponenten oder Fenster. Fensterfunktionen gruppieren unbegrenzte Sammlungen nach den Zeitstempeln der einzelnen Elemente. Jedes Fenster enthält eine endliche Anzahl von Elementen.

Mit den Apache Beam SDK- oder Dataflow SQL-Streaming-Erweiterungen legen Sie die folgenden Fenster fest:

Rollierende Fenster

Ein rollierendes Fenster stellt ein konsistentes, disjunktes Zeitintervall im Datenstrom dar.

Wenn Sie beispielsweise ein 30 Sekunden langes rollierendes Fenster festlegen, befinden sich die Elemente mit Zeitstempelwerten [0:00:00-0:00:30] im ersten Fenster. Elemente mit Zeitstempelwerten [0:00:30-0:01:00] befinden sich im zweiten Fenster.

Die folgende Abbildung zeigt, wie Elemente in rollierende 30-Sekunden-Fenster unterteilt werden.

Ein Bild, das rollierende Fenster mit einer Dauer von 30 Sekunden zeigt

Springende Fenster

Ein springendes Fenster stellt ein konsistentes Zeitintervall im Datenstrom dar. Springende Fenster können sich überschneiden, während rollierende Fenster disjunkt sind.

Beispielsweise kann ein springendes Fenster alle zehn Sekunden beginnen und eine Minute Daten und das Fenster erfassen. Die Frequenz, mit der springende Fenster beginnen, wird Periode genannt. Dieses Beispiel hat ein einminütiges Fenster und einen dreißigsekündigen Zeitraum.

Die folgende Abbildung zeigt, wie Elemente in springende einminütige Fenster mit einem Zeitraum von 30 Sekunden unterteilt werden.

Ein Bild, das springende Fenster mit einer Fensterdauer von einer Minute und einer Fensterperiode von 30 Sekunden zeigt

Um laufende Durchschnittswerte von Daten zu erhalten, verwenden Sie springende Fenster. Sie können springende einminütige Fenster mit 30-Sekunden-Perioden verwenden, um alle 30 Sekunden einen laufenden Durchschnitt von einer Minute zu berechnen.

Sitzungsfenster

Ein Sitzungsfenster enthält Elemente mit einer Abstandszeit eines anderen Elements. Die Abstandszeit ist ein Intervall zwischen neuen Daten in einem Datenstrom. Wenn Daten nach der Abstandszeit ankommen, werden die Daten einem neuen Fenster zugewiesen.

Sitzungsfenster können beispielsweise einen Datenstrom teilen, der die Nutzermausaktivität darstellt. Dieser Datenstream kann längere Inaktivitätszeiten mit vielen Klicks haben. Ein Sitzungsfenster kann die von den Klicks generierten Daten enthalten.

Beim Sitzungs-Windowing werden jedem Datenschlüssel verschiedene Fenster zugewiesen. Rollierende und springende Fenster enthalten alle Elemente im angegebenen Zeitintervall, unabhängig von den Datenschlüsseln.

Die folgende Abbildung zeigt, wie Elemente in Sitzungsfenster unterteilt werden.

Ein Bild, das Sitzungsfenster mit einer minimalen Abstandsdauer zeigt

Wasserzeichen

Ein Wasserzeichen ist ein Grenzwert, der angibt, wann Dataflow erwartet, dass alle Daten in einem Fenster angekommen sind. Wenn neue Daten mit einem Zeitstempel eintreffen, der sich im Fenster befindet, aber vor dem Wasserzeichen liegt, werden die Daten als verspätete Daten betrachtet.

Dataflow verfolgt Wasserzeichen aus folgenden Gründen:

  • Es kann nicht garantiert werden, dass Daten in zeitlicher Reihenfolge oder in vorhersehbaren Intervallen eingehen.
  • Es kann nicht garantiert werden, dass Datenereignisse in Pipelines in derselben Reihenfolge angezeigt werden, in der sie generiert wurden.

Die Datenquelle bestimmt das Wasserzeichen. Mit dem Apache Beam SDK können Sie verspätete Daten zulassen. Dataflow SQL verarbeitet keine späten Daten.

Trigger

Trigger bestimmen, wann aggregierte Ergebnisse nach dem Eintreffen von Daten ausgegeben werden. Standardmäßig werden Ergebnisse ausgegeben, wenn das Wasserzeichen das Ende des Fensters übergibt.

Sie können das Apache Beam SDK verwenden, um Trigger für jede Sammlung in einer Streaming-Pipeline zu erstellen oder zu ändern. Sie können mit Dataflow SQL keine Trigger festlegen.

Das Apache Beam SDK kann Trigger setzen, die mit einer beliebigen Kombination der folgenden Bedingungen arbeiten:

  • Ereigniszeit, wie durch den Zeitstempel für jedes Datenelement angegeben.
  • Die Verarbeitungszeit, in der das Datenelement in einer bestimmten Phase der Pipeline verarbeitet wird.
  • Die Anzahl der Datenelemente in einer Sammlung.