Dataflow supporta due modalità per i job di streaming:
- Modalità exactly-once. Questa modalità è l'impostazione predefinita per tutti i job Dataflow in streaming. In questa modalità, Dataflow garantisce che i record non vengano eliminati o duplicati man mano che i dati si spostano nella pipeline.
- Modalità at-least-once. Questa modalità garantisce che i record vengano elaborati almeno una volta (ovvero, nessun record di input viene perso). Tuttavia, in questa modalità sono possibili record duplicati. Per i casi d'uso che possono tollerare i duplicati, la modalità at-least-once può ridurre significativamente il costo e la latenza del job.
Scegliere la modalità di streaming da utilizzare
Scegli la modalità exactly-once se devi garantire risultati esatti dalla pipeline e una semantica prevedibile. Ad esempio:
- Pipeline con aggregazioni, come conteggio, somma o media.
- Casi d'uso fondamentali per l'attività che si basano sull'elaborazione dei record una sola volta. Alcuni esempi sono il rilevamento delle frodi, il rilevamento delle minacce di rete e le dashboard dell'inventario dell'e-commerce.
Scegli la modalità di streaming "Almeno una volta" se il tuo workload può tollerare record duplicati e potrebbe trarre vantaggio da una riduzione dei costi o della latenza. Ad esempio:
- Workload in cui la deduplicazione viene eseguita a valle di Dataflow. Ad esempio, pipeline che scrivono in BigQuery o in un datastore SQL.
- Pipeline solo mappa senza aggregazioni. Alcuni esempi includono l'elaborazione dei log, l'acquisizione dei dati di modifica o i job di estrazione, trasformazione e caricamento (ETL), in cui la pipeline esegue solo trasformazioni per elemento, come la conversione dello schema.
- Pipeline in cui il sink di output non può garantire la consegna "exactly-once", ad esempio Pub/Sub. In questo caso, la deduplicazione all'interno della pipeline potrebbe essere superflua e puoi usufruire del costo e della latenza ridotti della modalità di streaming almeno una volta.
- Pipeline che leggono da Pub/Sub. La lettura da Pub/Sub è notevolmente ottimizzata quando si utilizza la modalità at-least-once.
Ulteriori considerazioni
La modalità almeno una volta può ridurre significativamente il costo e la latenza di una pipeline. L'impatto esatto dipende dalle specifiche della pipeline. Testa lo streaming almeno una volta in condizioni di carico realistiche per valutare l'impatto.
Quando utilizzi la modalità at-least-once, la frequenza dei record duplicati dipende dal numero di tentativi. Il tasso di base è in genere basso (<1%). Tuttavia, possono verificarsi picchi se i nodi di lavoro non funzionano o se altre condizioni causano chiamate RPC ripetute.
La modalità di streaming influisce sul modo in cui Streaming Engine elabora i record, ma non modifica la semantica dei connettori I/O. Ti consigliamo di allineare la semantica I/O alla modalità di streaming. Ad esempio, se utilizzi la modalità di streaming at-least-once con il connettore BigQuery I/O, imposta la modalità di scrittura su
STORAGE_API_AT_LEAST_ONCE. I modelli Dataflow forniti da Google attivano automaticamente questa opzione quando utilizzi lo streaming almeno una volta.Le trasformazioni elemento per elemento, come
Map, non sono sempre idempotenti. Ad esempio, considera una funzione che riceve un messaggio e aggiunge il timestamp corrente. In questo caso, un record duplicato può produrre diversi output distinti. La modalità almeno una volta potrebbe non essere appropriata per questa pipeline.
Impostare la modalità di streaming
L'elaborazione exactly-once è l'impostazione predefinita per tutti i job Dataflow. Per attivare la modalità flusso di dati Almeno una volta, imposta l'opzione di servizio
streaming_mode_at_least_once
.
Java
--dataflowServiceOptions=streaming_mode_at_least_once
Python
--dataflow_service_options=streaming_mode_at_least_once
Vai
--dataflow_service_options=streaming_mode_at_least_once
Se non specifichi l'opzione streaming_mode_at_least_once, Dataflow utilizza la modalità di streaming esattamente una volta.
Se imposti l'opzione streaming_mode_at_least_once, Dataflow
abilita automaticamente Streaming Engine con
fatturazione basata sulle risorse.
Per aggiornare la modalità di streaming di un job in esecuzione, avvia un job sostitutivo.
Selezionare la modalità di streaming per un modello
Per selezionare la modalità di streaming quando esegui un modello di streaming Dataflow, segui questi passaggi:
Console
Nella console Google Cloud , vai alla pagina Job di Dataflow.
Fai clic su Crea job da modello.
Seleziona il modello che vuoi eseguire dal menu a discesa Modello Dataflow.
Per Modalità di streaming, seleziona la modalità di streaming. Se il modello supporta una sola modalità, questa opzione è disabilitata.
gcloud
Per attivare la modalità at-least-once, imposta l'opzione streaming_mode_at_least_once
nel flag additional-experiments:
--additional-experiments=streaming_mode_at_least_once
Per attivare la modalità exactly-once, imposta l'opzione streaming_mode_exactly_once
nel flag additional-experiments:
--additional-experiments=streaming_mode_exactly_once
Queste due opzioni si escludono a vicenda. Se non imposti una di queste opzioni, il modello utilizza per impostazione predefinita una modalità di streaming determinata dai metadati del modello. Per saperne di più, vedi Modelli personalizzati.
REST
Utilizza il campo additionalExperiments nell'oggetto
FlexTemplateRuntimeEnvironment
(modelli flessibili) o
RuntimeEnvironment
(modelli classici).
{
additionalExperiments : ["streaming_mode_at_least_once"]
...
}
Modelli personalizzati
Se crei un modello personalizzato che supporta l'elaborazione almeno una volta, aggiungi i seguenti campi di primo livello al file di metadati del modello:
{
"streaming": true,
"supportsAtLeastOnce": true,
"supportsExactlyOnce": true,
"defaultStreamingMode": "AT_LEAST_ONCE"
}
Questi campi di metadati consentono agli utenti di selezionare la modalità di streaming durante il deployment
del modello nella console Google Cloud . Il campo defaultStreamingMode
è facoltativo e specifica la modalità di streaming predefinita per il modello. Se non specifichi defaultStreamingMode e il modello supporta entrambe le modalità, la modalità exactly-once è quella predefinita.
Per saperne di più, consulta le seguenti sezioni della documentazione sui modelli Dataflow:
- Modelli flessibili: metadati
- Modelli classici: utilizzare i metadati nel codice della pipeline
Visualizzare la modalità di streaming di un job
Per visualizzare la modalità di streaming di un job, vai alla pagina Job nella consoleGoogle Cloud .
La modalità di streaming è elencata anche nella pagina dei dettagli del job, nel riquadro Informazioni job.
Limitazioni
La modalità di streaming Almeno una volta richiede Streaming Engine con fatturazione basata sulle risorse.
Prezzi
La modalità at-least-once utilizza sempre la fatturazione basata sulle risorse, in cui ti viene addebitato il costo delle risorse totali utilizzate dal job.
Il costo per unità delle unità di calcolo Streaming Engine è lo stesso indipendentemente dalla modalità di streaming. Tuttavia, nella maggior parte dei casi una pipeline consuma molte meno risorse totali quando utilizza la modalità at-least-once.
Passaggi successivi
- Scopri di più sull'elaborazione esattamente una volta.