PCollections illimitati, o raccolte illimitate, rappresentano i dati nelle pipeline in modalità flusso. Un numero illimitato contiene dati provenienti da 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 essere un numero infinito di elementi per una determinata chiave nei flussi di dati perché i dati aggiunge costantemente nuovi elementi. Puoi utilizzare Windows, filigrane 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 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 continuo aggiornamento e la pipeline passa alla modalità flusso
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
nel
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 flusso potrebbe non essere migliorato come previsto. Per i job di flussi di dati che non utilizzano Motore di flussi di dati non è possibile scalare oltre il numero originale di worker e Persistent Disk risorse allocate all'inizio del job originale. Quando aggiorna un del job Dataflow e specificare un numero maggiore di worker nel nuovo puoi specificare solo un numero di worker uguale al numero massimo di specificati per il lavoro originale.
Specifica il numero massimo di worker utilizzando i seguenti flag:
Java
--maxNumWorkers
Python
--max_num_workers
Vai
--max_num_workers
Funzioni di Windows e windowing
Le funzioni finestra dividono le raccolte illimitate in componenti logici o finestre. Le funzioni di windowing raggruppano le raccolte illimitate in base ai timestamp di i singoli elementi. Ogni finestra contiene un numero finito di elementi.
Con l'SDK Apache Beam imposti le seguenti finestre:
- Finestre a cascata (chiamate finestre fisse in Apache Beam)
- Finestre saltanti (chiamate finestre scorrevoli in Apache Beam)
- Finestre di sessione
Finestre a cascata
Una finestra con rotazione rappresenta un intervallo di tempo coerente e disgiunto nello stream di dati.
Ad esempio, se imposti una finestra a cascata di trenta secondi, gli elementi con i valori di timestamp [0:00:00-0:00:30) sono nella prima finestra. Elementi con i valori di timestamp [0:00:30-0:01:00) si trovano nella seconda finestra.
L'immagine seguente illustra come gli elementi vengono suddivisi in rotolamenti di trenta secondi finestre.
Finestre saltanti
Una finestra di hopping rappresenta un intervallo di tempo costante nella 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.
Per calcolare le medie correnti dei dati, utilizza finestre di hopping. Puoi utilizzare l'offerta finestre saltanti con un periodo di trenta secondi per calcolare una corsa 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 dell'intervallo, 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 avere lunghi periodi di inattività sparpagliati con molti clic. Una finestra della sessione può contenere i dati generati dai clic.
Il windowing della sessione assegna finestre diverse a ogni chiave 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.
Filigrane
Una soglia è una soglia che indica quando Dataflow si aspetta che tutti i dati in una finestra siano arrivati. Se la filigrana è andata a buon fine dopo la fine della finestra e arrivano i nuovi dati con un timestamp finestra, i 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 in cui sono stati generati.
L'origine dati determina la filigrana. Puoi consentire dati in ritardo con l'SDK Apache Beam.
Trigger
Gli attivatori determinano quando emettere risultati aggregati all'arrivo dei 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 i trigger per ogni 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 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
- Streaming 101: il mondo oltre il batch (post del blog)
- Streaming 102: The world than batch (blog)