Dataflow unterstützt zwei Modi für Streamingjobs:
- Genau einmal-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 einmalige Übermittlung. 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 „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 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 die Betrugserkennung, die 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 erfolgt. Beispielsweise 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 geringeren Latenz des Streamingmodus „Mindestens einmal“ profitieren.
- Pipelines, die Daten aus Pub/Sub lesen. Das Lesen aus Pub/Sub ist im „Mindestens einmal“-Modus deutlich optimiert.
Weitere Überlegungen
Der Modus „Mindestens einmal“ kann die Kosten und Latenz einer Pipeline erheblich reduzieren. 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.
Wenn Sie den „Mindestens einmal“-Modus verwenden, hängt die Anzahl der doppelten Datensätze von der Anzahl der Wiederholungsversuche ab. Die Baseline-Rate ist in der Regel niedrig (<1%). Spitzen können jedoch auftreten, 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 von I/O-Connectors. Es wird empfohlen, die I/O-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_ONCE
fest. Bei von Google bereitgestellten Dataflow-Vorlagen wird diese Option automatisch aktiviert, wenn Sie Streaming „Mindestens einmal“ verwenden.Elementweise Transformationen wie
Map
sind nicht immer idempotent. Nehmen wir zum Beispiel eine Funktion, die eine Nachricht empfängt und den aktuellen Zeitstempel daran 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 „Mindestens einmal“-Streamingmodus aktivieren möchten, legen Sie die Dienstoption streaming_mode_at_least_once
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 „Genau einmal“-Streamingmodus.
Wenn Sie die Option streaming_mode_at_least_once
festlegen, aktiviert Dataflow automatisch Streaming Engine mit ressourcenbasierter Abrechnung.
Wenn Sie den Streamingmodus eines laufenden Jobs 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 gewünschten Streamingmodus aus. Wenn die Vorlage nur einen Modus unterstützt, ist diese Option deaktiviert.
gcloud
Um den „Mindestens einmal“-Modus zu aktivieren, legen Sie die Option streaming_mode_at_least_once
im Flag additional-experiments
fest:
--additional-experiments=streaming_mode_at_least_once
Um den „Genau einmal“-Modus zu aktivieren, 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 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 -Konsole 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 Dokumentation zu Dataflow-Vorlagen:
- Flexible Vorlagen: Metadaten
- Klassische Vorlagen: Metadaten in Pipeline-Code verwenden
Streamingmodus eines Jobs ansehen
Rufen Sie in derGoogle Cloud -Console die Seite Jobs auf, um den Streamingmodus für einen Job anzusehen.
Der Streamingmodus wird auch auf der Seite mit den Jobdetails im Bereich Jobinfo aufgeführt.
Beschränkungen
Für den Streamingmodus „Mindestens einmal“ ist die Streaming Engine mit ressourcenbasierter Abrechnung erforderlich.
Preise
Im At-least-once-Modus 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 im „Mindestens einmal“-Modus jedoch deutlich weniger Ressourcen.