Pipeline in modalità flusso

PCollections illimitati, 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 di una raccolta illimitata. Potrebbero esserci un numero infinito di elementi per una determinata chiave nei dati in streaming perché l'origine dati aggiunge costantemente nuovi elementi. Puoi utilizzare windows, watermark e trigger per aggregare elementi in collezioni illimitate.

Il concetto di finestre si applica anche alle PCollection limitate che rappresentano i dati nelle pipeline batch. Per informazioni sulle finestre nelle pipeline batch, consulta la documentazione di Apache Beam relativa alle finestre 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à streaming utilizzando il flag --streaming, quando l'origine limitata viene completamente utilizzata, la pipeline smette di funzionare.

Usa modalità flusso di dati

Per eseguire una pipeline in modalità di streaming, 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ù grande, il job di streaming potrebbe non eseguire lo scaling come previsto. Per i job in streaming che non utilizzano Streaming Engine, non puoi eseguire lo scaling oltre il numero originale di worker e risorse di dischi permanenti allocati 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

Vai

--max_num_workers

Finestre e funzioni di finestra

Le funzioni finestra dividono le raccolte illimitate in componenti logici o finestre. Le funzioni di finestratura raggruppano le 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 costante e separato nei dati flusso di dati.

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

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

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

Finestre saltanti

Una finestra di salto rappresenta un intervallo di tempo coerente nello stream di dati. Le finestre apribili possono sovrapporsi, mentre le finestre a cascata sono separate.

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

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

Un'immagine che mostra finestre temporali 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 di scambio di un minuto con un periodo di trenta secondi per calcolare una media in tempo reale di un minuto ogni trenta secondi.

Finestre di sessione

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

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

La suddivisione in finestre della sessione assegna finestre diverse a ogni chiave di dati. Rulli e le finestre hopping contengono tutti gli elementi nell'intervallo di tempo specificato, di chiavi di 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 tutti i dati contenuti in una finestra. Se la filigrana è andata oltre la fine della finestra e arrivano nuovi dati con un timestamp all'interno della finestra, questi dati sono considerati dati in ritardo. Per ulteriori informazioni, vedi 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 generati.

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

Trigger

Gli attivatori determinano quando emettere i risultati aggregati man mano che arrivano i dati. Di Per impostazione predefinita, i risultati vengono emessi quando la filigrana oltrepassa la fine della finestra.

Puoi utilizzare l'SDK Apache Beam per creare o modificare gli attivatori per ogni raccolta in una pipeline di streaming.

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

  • Ora dell'evento, come indicata dal timestamp su ciascun elemento dei dati.
  • Tempo di elaborazione, ovvero il momento 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