Dataflow unterstützt zwei Modi für Streamingjobs:
- Genau einmaliger Modus : Dieser Modus ist der Standardmodus für alle Dataflow-Streamingjobs. In diesem Modus stellt Dataflow sicher, dass Datensätze nicht gelöscht oder dupliziert werden, wenn die Daten durch die Pipeline geleitet werden.
- Mindestens einmaliger Modus : Dieser Modus sorgt dafür, dass Datensätze mindestens einmal verarbeitet werden (d. h., es gehen keine Eingabedatensätze verloren). In diesem Modus sind jedoch doppelte Einträge möglich. Für Anwendungsfälle, in denen Duplikate toleriert werden können, kann der Modus „Mindestens einmal“ die Kosten und die Latenz Ihres Jobs erheblich senken.
Den zu verwendenden Streamingmodus auswählen
Wählen Sie den Modus „Genau einmal“ aus, wenn Sie genaue Ergebnisse aus der Pipeline und eine vorhersagbare Semantik benötigen. Beispiel:
- Pipelines mit Aggregationen, wie Anzahl, Summe oder Mittelwert.
- Geschäftskritische Anwendungsfälle, bei denen Datensätze nur einmal, also nur einmal verarbeitet werden. Beispiele sind Betrugserkennung, Erkennung von Netzwerkbedrohungen und E-Commerce-Inventar-Dashboards.
Wählen Sie den Streamingmodus „Mindestens einmal“ aus, wenn Ihre Arbeitslast doppelte Datensätze tolerieren kann und von reduzierten Kosten oder reduzierter Latenz profitieren könnte. Beispiel:
- Arbeitslasten, bei denen die Deduplizierung nachgelagert von Dataflow ausgeführt wird. Beispiele sind Pipelines, die in BigQuery oder einen SQL-Datenspeicher schreiben.
- Reine Zuordnungspipelines ohne Aggregationen. Beispiele sind die Log-verarbeitung, die Change Data Capture oder ETL-Jobs (Extract, Transform, Load), bei denen die Pipeline nur Elementtransformationen wie die Schemaübersetzung ausführt.
- 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 reduzierten Kosten und der Latenz des Streamingmodus „Mindestens einmal“ profitieren.
- Pipelines, die aus Pub/Sub lesen. Das Lesen aus Pub/Sub ist im Modus „Mindestens einmal“ deutlich optimiert.
Weitere Überlegungen
Der Modus „Mindestens einmal“ kann die Kosten und die Latenz einer Pipeline erheblich senken. Die genauen Auswirkungen hängen von den Besonderheiten der Pipeline ab. Testen Sie das "mindestens einmal" Streaming unter realistischen Lasten, um die Auswirkungen zu bewerten.
Bei Verwendung des Modus „Mindestens einmal“ hängt die Rate doppelter Datensätze von der Anzahl der Wiederholungen ab. Die Baseline-Rate ist in der Regel niedrig (< 1%). Es kann jedoch zu Spitzen kommen, wenn Worker-Knoten ausfallen oder andere Bedingungen wiederholte RPC-Aufrufe verursachen.
Der Streamingmodus wirkt sich darauf aus, wie die Streaming Engine Datensätze verarbeitet, ändert aber nicht die Semantik der E/A-Connectors. Es wird empfohlen, die E/A-Semantik an den Streamingmodus anzupassen. Wenn Sie beispielsweise den Streamingmodus „Mindestens einmal“ mit dem BigQuery-E/A-Connector verwenden, legen Sie den Schreibmodus auf
STORAGE_API_AT_LEAST_ONCEfest. Bei von Google bereitgestellten Dataflow-Vorlagen wird diese Option automatisch aktiviert, wenn Sie das Streaming „Mindestens einmal“ verwenden.Elementweise Transformationen wie
Mapsind nicht immer idempotent. Nehmen wir zum Beispiel eine Funktion, die eine Nachricht empfängt und den aktuellen Zeitstempel anhängt. In diesem Fall kann ein doppelter Datensatz mehrere verschiedene Ausgaben liefern. Der Modus „Mindestens einmal“ ist für diese Pipeline möglicherweise nicht geeignet.
Streamingmodus festlegen
Die genau einmalige Verarbeitung ist die Standardeinstellung für alle Dataflow-Jobs. Wenn Sie den Streamingmodus „Mindestens einmal“ aktivieren möchten, legen Sie die
streaming_mode_at_least_once
Dienstoption fest.
Java
--dataflowServiceOptions=streaming_mode_at_least_once
Python
--dataflow_service_options=streaming_mode_at_least_once
Go
--dataflow_service_options=streaming_mode_at_least_once
Wenn Sie die Option streaming_mode_at_least_once nicht angeben, verwendet Dataflow den Streamingmodus „Genau einmal“.
Wenn Sie die Option streaming_mode_at_least_once festlegen, aktiviert Dataflow
automatisch die Streaming Engine mit
ressourcenbasierter Abrechnung.
Wenn Sie den Streamingmodus für einen laufenden Job aktualisieren möchten, starten Sie einen Ersatzjob.
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 Modus „Mindestens einmal“ aktivieren möchten, legen Sie die Option streaming_mode_at_least_once im Flag additional-experiments fest:
--additional-experiments=streaming_mode_at_least_once
Wenn Sie den Modus „Genau einmal“ aktivieren möchten, legen Sie die Option streaming_mode_exactly_once im Flag additional-experiments fest:
--additional-experiments=streaming_mode_exactly_once
Diese beiden Optionen schließen sich gegenseitig aus. Wenn Sie keine dieser Optionen festlegen, wird für die Vorlage standardmäßig ein Streamingmodus verwendet, 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 Verarbeitung „Mindestens einmal“ unterstützt, fügen Sie der Vorlagenmetadatendatei 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 defaultStreamingMode nicht angeben und die Vorlage beide Modi unterstützt, ist der Modus „Genau einmal“ der Standardmodus.
Weitere Informationen finden Sie in den folgenden Abschnitten der Dataflow-Vorlagendokumentation:
- Flexible Vorlagen: Metadaten
- Klassische Vorlagen: Metadaten im Pipelinecode verwenden
Streamingmodus eines Jobs ansehen
Wenn Sie den Streamingmodus für einen Job ansehen möchten, rufen Sie in der Google Cloud Console die Seite Jobs auf.
Der Streamingmodus wird auch auf der Job-Detailseite im Bereich Jobinformationen aufgeführt.
Beschränkungen
Für den Streamingmodus „Mindestens einmal“ ist die Streaming Engine mit ressourcenbasierter Abrechnungerforderlich.
Preise
Im Modus „Mindestens einmal“ wird immer die ressourcenbasierte Abrechnung verwendet, bei der Ihnen die von Ihrem Job insgesamt verbrauchten Ressourcen in Rechnung gestellt werden.
Die Kosten pro Einheit für Streaming Engine-Recheneinheiten sind unabhängig vom Streamingmodus gleich. In den meisten Fällen verbraucht eine Pipeline jedoch deutlich weniger Ressourcen, wenn der Modus „Mindestens einmal“ verwendet wird.
Nächste Schritte
- Weitere Informationen zur genau einmaligen Verarbeitung.