Pipeline in modalità flusso

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

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

Il concetto di finestre si applica anche alle PCollection limitate che rappresentano i dati nelle pipeline in modalità batch. Per informazioni sull'applicazione di finestre nelle pipeline batch, consulta la documentazione di Apache Beam per finestra con PCollection limitate.

Se una pipeline Dataflow ha un'origine dati limitata, ovvero un'origine che non contiene dati in continuo aggiornamento, e la pipeline passa in modalità flusso utilizzando il flag --streaming, quando l'origine limitata viene completamente utilizzata, l'esecuzione della pipeline si interrompe.

Usa modalità di streaming

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

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

Quando aggiorni la pipeline con un pool di worker più ampio, il job di inserimento dei flussi potrebbe non eseguire l'upgrade come previsto. Per i job di flusso che non utilizzano Streaming Engine, non è possibile scalare oltre il numero originale di worker e le risorse 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 windowing e Windows

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

Puoi impostare le seguenti finestre con l'SDK Apache Beam o le estensioni di streaming SQL Dataflow:

Finestre rotanti

Una finestra temporale rappresenta un intervallo di tempo disgiunto e coerente nel flusso di dati.

Ad esempio, se imposti una finestra di rotazione 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 vengono suddivisi in finestre rotatorie di trenta secondi.

Un'immagine che mostra finestre rotonde della durata di 30 secondi

Finestre saltellanti

Una finestra di salto rappresenta un intervallo di tempo coerente nel stream di dati. Le finestre aperte possono sovrapporsi, mentre quelle rotanti 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 di salto viene chiamata punto. In questo esempio sono presenti una finestra di un minuto e un periodo di trenta secondi.

L'immagine seguente mostra come gli elementi vengono suddivisi in finestre di salto di un minuto con un periodo di 30 secondi.

Un'immagine che mostra periodi di balzo con una durata di 1 minuto e una finestra di 30 secondi

Per ottenere medie di dati in esecuzione, utilizza finestre di salto. Puoi utilizzare intervalli di 1 minuto con un periodo di 30 secondi per calcolare una media di esecuzione di un minuto ogni 30 secondi.

Finestre sessione

Una finestra di sessione contiene elementi entro una durata di intervallo da un altro elemento. La durata del divario è un intervallo tra i nuovi dati in uno stream di dati. Se i dati arrivano dopo la durata dell'intervallo, vengono assegnati a una nuova finestra.

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

La finestra delle sessioni assegna finestre diverse a ciascuna chiave di dati. Le finestre rotante e di salto contengono tutti gli elementi nell'intervallo di tempo specificato, indipendentemente dalle chiavi dei dati.

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

Un'immagine che mostra le finestre delle sessioni con una durata minima dell'intervallo

Filigrane

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

Dataflow monitora le filigrane per i seguenti motivi:

  • Non è garantito che i dati arrivino in ordine di tempo 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 recenti con l'SDK Apache Beam. Dataflow SQL non elabora i dati recenti.

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 i trigger per ogni raccolta in una pipeline in modalità flusso. Non puoi impostare trigger con SQL Dataflow.

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

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

Passaggi successivi

Per un'analisi approfondita della progettazione di flussi SQL in modalità flusso, consulta Un SQL per regolarli tutti.