Pipeline in modalità flusso

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

Non puoi utilizzare solo una chiave per raggruppare elementi in una raccolta non limitata. Potrebbero esserci infiniti 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 nelle raccolte illimitate.

Il concetto di finestre si applica anche alle PCollection limitate che rappresentano i dati nelle pipeline in modalità batch. Per informazioni sulla creazione di finestre nelle pipeline in modalità 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 aggiornamento continuo, e la pipeline passa alla modalità flusso utilizzando il flag --streaming, quando l'origine limitata viene utilizzata completamente, l'esecuzione della pipeline si interrompe.

Usare la 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 di flussi in modo programmatico quando crei la pipeline.

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

Quando aggiorni la pipeline con un pool più ampio di worker, il job di inserimento di flussi potrebbe non avere la scalabilità necessaria come previsto. Per i job di flussi di dati che non utilizzano Streaming Engine, non puoi scalare oltre il numero originale di worker e 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 Windows e windowing

Le funzioni di finestra dividono le raccolte illimitate in componenti logici o finestre. 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:

Finestre cadenti

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

Ad esempio, se imposti una finestra di 30 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.

La seguente immagine mostra come gli elementi sono suddivisi in finestre di trenta secondi che si alternano.

Un'immagine che mostra finestre scoppiate, della durata di 30 secondi

Finestre scintillanti

Una finestra di spostamento rappresenta un intervallo di tempo coerente nel stream di dati. Le finestre che rotolano possono sovrapporsi, mentre quelle che rotolano sono disgiunte.

Ad esempio, una finestra di spostamento può iniziare ogni 30 secondi e acquisire un minuto di dati. La frequenza con cui iniziano i periodi di attesa è chiamata punto. Questo esempio include una finestra di un minuto e un periodo di trenta secondi.

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

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

Per acquisire medie di dati correnti, utilizza l'intervallo tra le finestre. Puoi utilizzare le finestre di salto di un minuto con un periodo di 30 secondi per calcolare una media di esecuzione di un minuto ogni 30 secondi.

Finestre di sessione

Una finestra di sessione contiene elementi entro una durata dell'intervallo rispetto a 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 dividere uno stream di dati che rappresenta l'attività del mouse dell'utente. Questo stream di dati potrebbe avere lunghi periodi di inattività alternati a molti clic. Una finestra di sessione può contenere i dati generati dai clic.

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

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

Un'immagine che mostra finestre di 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 superato la fine della finestra e arrivano nuovi dati con un timestamp all'interno della finestra, questi sono considerati dati recenti. 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 siano 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 i 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:

  • L'ora dell'evento, come indicata dal timestamp su ogni elemento di dati.
  • Tempo di elaborazione, ovvero il tempo durante il quale l'elemento di dati viene elaborato in una determinata fase della pipeline.
  • Il numero di elementi di dati in una raccolta.

Passaggi successivi