Streaming mit Pub/Sub

Diese Seite bietet eine konzeptionelle Übersicht über die Einbindung von Dataflow in Pub/Sub. In der Übersicht werden einige Optimierungen beschrieben, die in der Dataflow Runner-Implementierung des Pub/Sub-I/O-Connectors verfügbar sind. Pub/Sub ist ein skalierbares, langlebiges System zur Aufnahme und Übermittlung von Ereignissen. Dataflow ergänzt das skalierbare Pub/Sub-Modell von mindestens einer Übermittlung durch die Deduplizierung von Nachrichten, die genau einmalige Verarbeitung und die Generierung eines Datenwasserzeichens aus Ereignissen mit Zeitstempel. Zur Verwendung von Dataflow schreiben Sie die Pipeline mit dem Apache Beam SDK und führen dann den Pipeline-Code im Dataflow-Dienst aus.

Bevor Sie beginnen, machen Sie sich mit den grundlegenden Konzepten von Apache Beam und Streamingpipelines vertraut. Weitere Informationen finden Sie in den folgenden Ressourcen:

Streamingpipelines mit Pub/Sub erstellen

Um die Vorteile der Dataflow-Einbindung in Pub/Sub zu nutzen, können Sie Ihre Streamingpipelines auf eine der folgenden Arten erstellen:

Pub/Sub und Features für die Einbindung von Dataflow

Apache Beam bietet eine Implementierung der Referenz-E/A-Quelle (PubsubIO) für Pub/Sub (Java, Python und Go). Diese E/A-Quellimplementierung wird von Nicht-Dataflow-Runnern wie dem Apache Spark-Runner, dem Apache Flink-Runner und dem direkten Runner verwendet.

Der Dataflow-Runner verwendet eine andere, private Implementierung von PubsubIO (für Java, Python und Go) Bei dieser Implementierung werden die Vorteile von Google Cloud-internen APIs und Diensten genutzt, um drei wichtige Vorteile zu bieten: Wasserzeichen mit niedriger Latenz, hohe Wasserzeichengenauigkeit (und somit Vollständigkeit der Daten) und eine effiziente Deduplizierung (Verarbeitung einmaliger Nachrichten).

Mit den E/A-Connectors von Apache Beam können Sie über gesteuerte Quellen und Senken mit Dataflow interagieren. Die Implementierung von PubsubIO durch den Dataflow-Runner erkennt Nachrichten automatisch, nachdem sie von der ersten zusammengeführten Phase erfolgreich verarbeitet wurden und Nebeneffekte dieser Verarbeitung in den nichtflüchtigen Speicher geschrieben werden. Weitere Informationen finden Sie in der Dokumentation zu Fusion. Nachrichten werden daher nur bestätigt, wenn Dataflow garantieren kann, dass kein Datenverlust auftritt, wenn eine Komponente abstürzt oder eine Verbindung unterbrochen wird.

Wasserzeichen mit niedriger Latenz

Dataflow hat Zugriff auf die private API von Pub/Sub, die das Alter der ältesten nicht bestätigten Nachricht in einem Abo mit einer niedrigeren Latenz angibt, als in Cloud Monitoring verfügbar ist. Zum Vergleich: Die in Cloud Monitoring verfügbaren Pub/Sub-Rückstandsmesswerte werden in der Regel um zwei bis drei Minuten verzögert, aber die Messwerte werden für Dataflow nur um etwa zehn Sekunden verzögert. Dadurch kann Dataflow Pipeline-Wasserzeichen vorziehen und die Ergebnisse der Fensterberechnungen früher ausgeben.

Hohe Wasserzeichengenauigkeit

Ein weiteres wichtiges Problem, das nativ durch die Dataflow-Einbindung in Pub/Sub gelöst wird, ist die Notwendigkeit eines robusten Wasserzeichens für in Ereigniszeit definierte Fenster. Die Ereigniszeit ist ein Zeitstempel, der von der Publisher-Anwendung als Attribut einer Pub/Sub-Nachricht angegeben wird, also nicht das Feld publish_time, das vom Pub/Sub-Dienst für eine Nachricht festgelegt wird. Da Pub/Sub Rückstandsstatistiken nur in Bezug auf die Zeitstempel für zugewiesene Dienste oder Verarbeitungszeiten berechnet, erfordert die Schätzung des Ereigniszeit-Wasserzeichens einen separaten Mechanismus.

Um dieses Problem zu lösen, erstellt der Dataflow-Dienst ein zweites Tracking-Abo, wenn der Nutzer benutzerdefinierte Ereigniszeitstempel verwenden möchte. Dieses Tracking-Abo wird verwendet, um die Ereigniszeiten der Nachrichten im Rückstand des Basisabos zu prüfen und den Rückstand der Ereigniszeit zu schätzen. Weitere Informationen finden Sie auf der StackOverflow-Seite mit Informationen zur Berechnung von Pub/Sub-Wasserzeichen durch Dataflow.

Effiziente Deduplizierung

Die Nachrichtendeduplizierung ist für die Verarbeitung einmaliger Nachrichten erforderlich. Sie können das Apache Beam-Programmiermodell verwenden, um eine genau einmalige Verarbeitung von Pub/Sub-Nachrichtenstreams zu erreichen. Dataflow dedupliziert Nachrichten in Bezug auf die Pub/Sub-Nachrichten-ID. Daher kann die gesamte Verarbeitungslogik davon ausgehen, dass die Nachrichten bereits eindeutig in Bezug auf die Pub/Sub-Nachrichten-ID sind. Der effiziente, inkrementelle Aggregationsmechanismus hierfür wird in der PubsubIO API abstrahiert.

Wenn PubsubIO so konfiguriert ist, dass anstelle der Nachrichten-ID das Pub/Sub-Nachrichtenattribut für die Deduplizierung verwendet wird, dedupliziert Dataflow in Pub/Sub veröffentlichte Nachrichten innerhalb von zehn Minuten.

Nicht unterstützte Pub/Sub-Features

Die folgenden Pub/Sub-Features werden in der Dataflow Runner-Implementierung des Pub/Sub-E/A-Connectors nicht unterstützt.

Themen für unzustellbare Nachrichten und Wiederholungsrichtlinien für exponentielle Backoff-Verzögerungen

Pub/Sub-Themen für unzustellbare Nachrichten und Wiederholungsrichtlinien für exponentielle Backoff-Verzögerungen werden von Dataflow nicht vollständig unterstützt. Binden Sie diese Muster stattdessen explizit in die Pipeline ein. Zwei Beispiele für Muster für unzustellbare Nachrichten finden Sie in der Einzelhandelsanwendung und der Vorlage „Pub/Sub für BigQuery“.

Es gibt zwei Gründe, warum Themen für unzustellbare Nachrichten und Wiederholungsrichtlinien für exponentielle Backoff-Verzögerungen mit Dataflow nicht funktionieren.

Erstens: Dataflowsendet keine NACK-Nachrichten (also keine negative Bestätigung) an Pub/Sub, wenn der Pipelinecode fehlschlägt. Stattdessen wiederholt Dataflow die Nachrichtenverarbeitung auf unbestimmte Zeit und erweitert gleichzeitig die Bestätigungsfrist für die Nachricht kontinuierlich. Das Dataflow-Backend kann jedoch aus verschiedenen internen Gründen NACK-Nachrichten senden. Daher ist es möglich, dass Nachrichten an das Thema für unzustellbare Nachrichten gesendet werden, auch wenn im Pipelinecode keine Fehler aufgetreten sind.

Zweitens kann Dataflow Nachrichten bestätigen, bevor die Pipeline die Daten vollständig verarbeitet. Dataflow bestätigt Nachrichten, nachdem sie von der ersten zusammengeführten Phase erfolgreich verarbeitet wurden und die Nebeneffekte dieser Verarbeitung in den nichtflüchtigen Speicher geschrieben wurden. Wenn die Pipeline mehrere zusammengeführte Phasen enthält und nach der ersten Phase Fehler auftreten, werden die Nachrichten bereits bestätigt.

Pub/Sub-Genau einmalige Zustellung

Da Dataflow eine genau einmalige Verarbeitung hat, wird die Verwendung der genau passenden Pub/Sub-Bereitstellung mit Dataflow nicht empfohlen. Das Aktivieren der genau einmaligen Übermittlung an Pub/Sub reduziert die Pipelineleistung, da die für die parallele Verarbeitung verfügbaren Nachrichten begrenzt werden.

Pub/Sub-Nachrichtenreihenfolge

Wenn die Pub/Sub-Nachrichtenreihenfolge aktiviert ist, kann Dataflow die Nachrichten möglicherweise neu anordnen. Die Pipeline wird ausgeführt, aber es kann nicht garantiert werden, dass die Nachrichten in der Reihenfolge ankommen, in der Dataflow sie empfängt. Wenn Sie Pub/Sub mit Dataflow verwenden, kann die Aktivierung der Nachrichtenreihenfolge jedoch die Latenz erhöhen und die Leistung verringern.

Nächste Schritte