Dataflow unterstützt zwei Modi für Streamingjobs:
- Genau einmal-Modus. Dieser Modus ist der Standard für alle Dataflow-Streamingjobs. In diesem Modus sorgt Dataflow dafür, dass Datensätze nicht gelöscht oder dupliziert werden, wenn sich die Daten durch die Pipeline bewegen.
- Mindestens-einmal-Modus. Dieser Modus garantiert, dass Datensätze mindestens einmal verarbeitet werden (d. h., es gehen keine Eingabedatensätze verloren). In diesem Modus sind jedoch doppelte Datensätze möglich. Bei Anwendungsfällen, die Duplikate tolerieren können, kann der "Mindestens einmal"-Modus die Kosten und die Latenz Ihres Jobs erheblich senken.
Streamingmodus auswählen
Wählen Sie den „Genau einmal“-Modus aus, wenn Sie genaue Ergebnisse aus der Pipeline und vorhersehbare Semantik benötigen. Beispiel:
- Pipelines mit Aggregationen wie Anzahl, Summe oder Mittelwert.
- Geschäftskritische Anwendungsfälle, bei denen Datensätze nur einmal verarbeitet werden müssen. Beispiele sind die Betrugserkennung, die Erkennung von Netzwerkbedrohungen und E-Commerce-Inventar-Dashboards.
Wählen Sie den "Mindestens einmal"-Streamingmodus aus, wenn Ihre Arbeitslast doppelte Datensätze tolerieren kann und von geringeren Kosten oder Latenzen profitieren könnte. Beispiel:
- Arbeitslasten, bei denen die Deduplizierung nach Dataflow erfolgt. Beispiel: Pipelines, die in BigQuery oder einen SQL-Datenspeicher schreiben.
- Reine Zuordnungspipelines ohne Aggregationen. Beispiele sind Logverarbeitungs-, Change Data Capture- oder ETL-Jobs (Extrahieren, Transformieren und Laden), bei denen die Pipeline nur Transformationen pro Element ausführt, wie z. B. Schemaübersetzung.
- Pipelines, bei denen die Ausgabesenke keine genau einmalige Übermittlung garantieren kann, z. B. Pub/Sub. In diesem Fall ist die Deduplizierung innerhalb der Pipeline möglicherweise nicht erforderlich und Sie können von den geringeren Kosten und der Latenz des "Mindestens einmal"-Streamingmodus profitieren.
- Pipelines, die aus Pub/Sub lesen. Das Lesen aus Pub/Sub wird bei Verwendung des "Mindestens einmal"-Modus erheblich optimiert.
Weitere Hinweise
Der "Mindestens einmal"-Modus kann die Kosten und die Latenz einer Pipeline erheblich reduzieren. Die genaue Auswirkung hängt von den Besonderheiten der Pipeline ab. Testen Sie mindestens einmaliges Streaming unter realistischen Lasten, um die Auswirkungen zu bewerten.
Im "Mindestens einmal"-Modus hängt die Rate doppelter Einträge von der Anzahl der Wiederholungen ab. Die Basisrate ist normalerweise niedrig (< 1%). Spitzen können jedoch auftreten, wenn Worker-Knoten ausfallen oder andere Bedingungen zu wiederholten RPC-Aufrufen führen.
Der Streaming-Modus wirkt sich darauf aus, wie Streaming Engine Datensätze verarbeitet, ändert jedoch nicht die Semantik von E/A-Connectors. Es wird empfohlen, die E/A-Semantik an den Streaming-Modus anzupassen. Wenn Sie beispielsweise den "Mindestens einmal"-Streamingmodus mit dem BigQuery-E/A-Connector verwenden, legen Sie den Schreibmodus auf
STORAGE_API_AT_LEAST_ONCE
fest. Von Google bereitgestellte Dataflow-Vorlagen aktivieren diese Option automatisch, wenn Sie mindestens einmaliges Streaming verwenden.Elementbezogene Transformationen wie
Map
sind nicht immer idempotent. Angenommen, eine Funktion empfängt eine Nachricht und hängt den aktuellen Zeitstempel an diese an. In diesem Fall kann ein doppelter Eintrag zu mehreren unterschiedlichen Ausgaben führen. Der "Mindestens einmal"-Modus ist für diese Pipeline möglicherweise nicht geeignet.
Streamingmodus festlegen
Die genau einmalige Verarbeitung ist die Standardeinstellung für alle Dataflow-Jobs. Legen Sie die Dienstoption streaming_mode_at_least_once
fest, um den "Mindestens einmal"-Streamingmodus zu aktivieren.
Java
--dataflowServiceOptions=streaming_mode_at_least_once
Python
--dataflow_service_options=streaming_mode_at_least_once
Einfach loslegen (Go)
--dataflow_service_options=streaming_mode_at_least_once
Wenn Sie die Option streaming_mode_at_least_once
nicht angeben, verwendet Dataflow den „Genau einmal“-Streamingmodus.
Wenn Sie die Option streaming_mode_at_least_once
festlegen, aktiviert Dataflow automatisch Streaming Engine mit ressourcenbasierter Abrechnung.
Um den Streaming-Modus für einen laufenden Job zu aktualisieren, beenden Sie den vorhandenen Job und führen Sie einen Ersatzjob aus. Weitere Informationen finden Sie unter Ersatzjob starten.
Streamingmodus für eine Vorlage auswählen
Führen Sie die folgenden Schritte aus, um beim Ausführen einer Dataflow-Streaming-Vorlage den Streaming-Modus auszuwählen:
Console
Rufen Sie in der Google Cloud Console die Dataflow-Seite Jobs auf.
Klicken Sie auf Job aus Vorlage erstellen.
Wählen Sie im Drop-down-Menü Dataflow-Vorlage die Vorlage aus, die Sie ausführen möchten.
Wählen Sie unter Streamingmodus den Streamingmodus aus. Wenn die Vorlage nur einen Modus unterstützt, ist diese Option deaktiviert.
gcloud
Wenn Sie den "Mindestens einmal"-Modus aktivieren möchten, geben Sie im Flag additional-experiments
die Option streaming_mode_at_least_once
an:
--additional-experiments=streaming_mode_at_least_once
Wenn Sie den genau einmaligen Modus aktivieren möchten, legen Sie im Flag additional-experiments
die Option streaming_mode_exactly_once
fest:
--additional-experiments=streaming_mode_exactly_once
Diese beiden Optionen schließen sich gegenseitig aus. Wenn Sie keine dieser Optionen festlegen, verwendet die Vorlage standardmäßig den Streamingmodus, der durch die Vorlagenmetadaten bestimmt wird. Weitere Informationen finden Sie unter Benutzerdefinierte Vorlagen.
REST
Verwenden Sie das Feld additionalExperiments
im Objekt FlexTemplateRuntimeEnvironment
(Flex-Vorlagen) oder RuntimeEnvironment
(klassische Vorlagen).
{
additionalExperiments : ["streaming_mode_at_least_once"]
...
}
Benutzerdefinierte Vorlagen
Wenn Sie eine benutzerdefinierte Vorlage erstellen, die die mindestens einmalige Verarbeitung unterstützt, fügen Sie der Metadatendatei der Vorlage die folgenden Felder der obersten Ebene hinzu:
{
"streaming": true,
"supportsAtLeastOnce": true,
"supportsExactlyOnce": true,
"defaultStreamingMode": "AT_LEAST_ONCE"
}
Mit diesen Metadatenfeldern können Nutzer den Streamingmodus auswählen, wenn sie die Vorlage in der Google Cloud Console bereitstellen. Das Feld defaultStreamingMode
ist optional und gibt den Standard-Streamingmodus für die Vorlage an. Wenn Sie defaultStreamingModeg
nicht angeben und die Vorlage beide Modi unterstützt, wird der "Genau einmal"-Modus standardmäßig verwendet.
Weitere Informationen finden Sie in den folgenden Abschnitten der Dokumentation zu Dataflow-Vorlagen:
- Flex-Vorlagen: Metadaten
- Klassische Vorlagen: Metadaten in Ihrem Pipelinecode verwenden
Streamingmodus eines Jobs ansehen
Rufen Sie in der Google Cloud Console die Seite Jobs auf, um sich den Streaming-Modus für einen Job anzeigen zu lassen.
Der Streamingmodus wird auch auf der Seite mit den Jobdetails im Bereich Jobinformationen aufgeführt.
Beschränkungen
Für den "Mindestens einmal"-Streamingmodus ist Streaming Engine mit ressourcenbasierter Abrechnung erforderlich.
Preise
Im "Mindestens einmal"-Modus wird immer die ressourcenbasierte Abrechnung verwendet. Dabei werden Ihnen die Gesamtressourcen in Rechnung gestellt, die von Ihrem Job verbraucht werden.
Die Kosten pro Einheit für Streaming Engine-Recheneinheiten sind unabhängig vom Streamingmodus identisch. In den meisten Fällen verbraucht eine Pipeline jedoch deutlich weniger Gesamtressourcen, wenn der "Mindestens einmal"-Modus verwendet wird.