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 und Python), die von Nicht-Dataflow-Runnern wie dem Apache Spark-Runner, dem Apache Flink-Runner und dem direkten Runner verwendet wird.

Der Dataflow-Runner verwendet jedoch eine andere, private Implementierung von PubsubIO. 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.

Die Implementierung von PubsubIO durch den Dataflow-Runner erkennt Nachrichten automatisch, sobald sie von der ersten zusammengeführten Phase erfolgreich verarbeitet wurden (und Nebeneffekte dieser Verarbeitung wurden in den nichtflüchtigen Speicher geschrieben). Weitere Informationen finden Sie in der Dokumentation zu Fusion. Daher werden Nachrichten 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. 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

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

Pub/Sub-Themen für unzustellbare Nachrichten und exponentielle Backoff-Verzögerungsrichtlinien 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 Richtlinien 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-Back-End 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, wurden die Nachrichten bereits bestätigt.