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:
- Einführung in Apache Beam-Konzepte wie PCollections, Trigger, Fenster und Wasserzeichen
- After Lambda: Exactly-once processing in Dataflow Part 1 und Part 3: Sources and Sinks
- Streaming: The world beyond batch: 101 und 102
- Programmieranleitung für Apache Beam
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:
Verwenden Sie den vorhandenen Streamingpipeline-Beispielcode aus dem Apache Beam-GitHub-Repository, z. B. Streaming-Wortextrahierung (Java), Streaming-Wortzählung (Python) und streaming_wordcap (Go).
Schreiben Sie eine neue Pipeline mithilfe der Apache Beam API-Referenz (Java, Python oder Go).
Verwenden Sie von Google bereitgestellte Dataflow-Vorlagen und den entsprechenden Quellcode der Vorlage in Java.
Google bietet eine Reihe von Dataflow-Vorlagen, die eine UI-basierte Möglichkeit bieten, Pipelines für die Pub/Sub-Streamverarbeitung zu starten. Wenn Sie Java verwenden, können Sie auch den Quellcode dieser Vorlagen als Ausgangspunkt für die Erstellung einer benutzerdefinierten Pipeline verwenden.
Die folgenden Streamingvorlagen exportieren Pub/Sub-Daten an verschiedene Ziele:
- Pub/Sub-Abo für BigQuery
- Pub/Sub für Pub/Sub-Relay
- Pub/Sub für Cloud Storage Avro
- Pub/Sub für Cloud Storage Text
- Cloud Storage Text für Pub/Sub {Stream}
Mit der folgenden Batchvorlage wird ein Datenstrom in ein Pub/Sub-Thema importiert:
Folgen Sie der Pub/Sub-Kurzanleitung zur Streamverarbeitung mit Dataflow, um eine einfache Pipeline auszuführen.
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
- Streamverarbeitung mit Pub/Sub und Dataflow: Qwik Start (Lab zum selbstbestimmten Lernen)
- Von Pub/Sub zu BigQuery streamen