Pipeline in modalità flusso

PCollections illimitate o raccolte illimitate rappresentano i dati nelle pipeline in modalità flusso. Una raccolta illimitata contiene dati provenienti da un'origine dati in costante aggiornamento, come Pub/Sub.

Non puoi utilizzare solo una chiave per raggruppare gli elementi di una raccolta illimitata. Potrebbero esserci infiniti elementi per una determinata chiave nei flussi di dati perché l'origine dati aggiunge costantemente nuovi elementi. Puoi utilizzare finestre, watermarks e attivatori per aggregare elementi in raccolte illimitate.

Il concetto di finestre si applica anche alle PCollection limitate che rappresentano i dati nelle pipeline batch. Per informazioni sul windowing nelle pipeline batch, consulta la documentazione di Apache Beam per Windowing con PCollection limitate.

Se una pipeline Dataflow ha un'origine dati limitata, ovvero un'origine che non contiene dati in aggiornamento continuo, e la pipeline viene passata alla modalità flusso di dati utilizzando il flag --streaming, quando l'origine limitata è completamente consumata, l'esecuzione della pipeline viene interrotta.

Usa modalità flusso di dati

Per eseguire una pipeline in modalità flusso di dati, imposta il flag --streaming nella riga di comando quando esegui la pipeline. Puoi anche impostare la modalità flusso di dati in modo programmatico quando crei la pipeline.

Le origini batch non sono supportate in modalità flusso di dati.

Quando aggiorni la pipeline con un pool di worker più ampio, il job di flusso potrebbe non essere migliorato come previsto. Per i job di flussi che non utilizzano Streaming Engine, non puoi scalare oltre il numero originale di worker e risorse di Persistent Disk allocate all'inizio del job originale. Quando aggiorni un job Dataflow e specifichi un numero maggiore di worker nel nuovo job, puoi specificare solo un numero di worker uguale al numero massimo di worker specificato per il job originale.

Specifica il numero massimo di worker utilizzando i seguenti flag:

Java

--maxNumWorkers

Python

--max_num_workers

Go

--max_num_workers

Funzioni di Windows e windowing

Le funzioni di finestra suddividono raccolte illimitate in componenti logici o finestre. Le funzioni di windowing raggruppano raccolte illimitate in base ai timestamp dei singoli elementi. Ogni finestra contiene un numero finito di elementi.

Imposta le seguenti finestre con l'SDK Apache Beam:

Finestre a cascata

Una finestra a cascata rappresenta un intervallo di tempo coerente e separato nel flusso di dati.

Ad esempio, se imposti una finestra a cascata di trenta secondi, gli elementi con valori di timestamp [0:00:00-0:00:30) si trovano nella prima finestra. Gli elementi con valori di timestamp [0:00:30-0:01:00) si trovano nella seconda finestra.

L'immagine seguente illustra come gli elementi sono suddivisi in finestre a cascata di trenta secondi.

Un'immagine che mostra finestre a cascata della durata di 30 secondi

Finestre saltanti

Una finestra di hopping rappresenta un intervallo di tempo costante nel stream di dati. Le finestre apribili possono sovrapporsi, mentre le finestre a cascata sono separate.

Ad esempio, una finestra temporale può iniziare ogni 30 secondi e acquisire un minuto di dati. La frequenza con cui iniziano le finestre saltanti è chiamata period. Questo esempio ha una finestra di un minuto e una durata di trenta secondi.

L'immagine seguente illustra come gli elementi vengono suddivisi in finestre di un minuto con un periodo di trenta secondi.

Un'immagine che mostra finestre saltanti con una durata della finestra di 1 minuto e una durata della finestra di 30 secondi

Per calcolare le medie correnti dei dati, utilizza finestre di hopping. Puoi utilizzare finestre temporali di un minuto con un periodo di trenta secondi per calcolare una media di esecuzione di un minuto ogni 30 secondi.

Finestre di sessione

Una finestra di sessione contiene elementi compresi in un intervallo di tempo rispetto a un altro elemento. La durata intervallo è un intervallo tra i nuovi dati in uno stream di dati. Se i dati arrivano dopo la durata gap, vengono assegnati a una nuova finestra.

Ad esempio, le finestre di sessione possono dividere uno stream di dati che rappresenta l'attività del mouse dell'utente. Questo stream di dati potrebbe presentare lunghi periodi di inattività alternati a molti clic. Una finestra della sessione può contenere i dati generati dai clic.

Il windowing della sessione assegna finestre diverse a ogni chiave dati. Le finestre a cascata contengono tutti gli elementi nell'intervallo di tempo specificato, indipendentemente dalle chiavi dei dati.

La seguente immagine mostra come gli elementi sono suddivisi in finestre di sessione.

Un'immagine che mostra finestre di sessione con un intervallo di tempo minimo

Filigrane

Una filigrana è una soglia che indica quando Dataflow prevede l'arrivo di tutti i dati in una finestra. Se la filigrana ha superato la fine della finestra e arrivano nuovi dati con un timestamp all'interno della finestra, i dati vengono considerati dati in ritardo. Per ulteriori informazioni, consulta Filigrane e dati in ritardo nella documentazione di Apache Beam.

Dataflow monitora le filigrane per i seguenti motivi:

  • Non è garantito che i dati arrivino in ordine cronologico o a intervalli prevedibili.
  • Non è garantito che gli eventi di dati vengano visualizzati nelle pipeline nello stesso ordine in cui sono stati generati.

L'origine dati determina la filigrana. Puoi consentire i dati in ritardo con l'SDK Apache Beam.

Trigger

Gli attivatori determinano quando emettere risultati aggregati all'arrivo dei dati. Per impostazione predefinita, i risultati vengono emessi quando la filigrana supera la fine della finestra.

Puoi utilizzare l'SDK Apache Beam per creare o modificare trigger per ogni raccolta in una pipeline in modalità flusso.

L'SDK Apache Beam può impostare trigger che operano su qualsiasi combinazione delle seguenti condizioni:

  • Ora dell'evento, come indicato dal timestamp su ciascun elemento dei dati.
  • Tempo di elaborazione, ovvero il tempo in cui l'elemento dati viene elaborato in qualsiasi fase specifica della pipeline.
  • Il numero di elementi di dati in una raccolta.

Passaggi successivi