Trasmetti le modifiche con Dataflow
Il connettore Beam Bigtable ti consente di utilizzare Dataflow per leggere i record delle modifiche dei dati di Bigtable senza dover monitorare o elaborare le modifiche della partizione nel codice, perché il connettore gestisce questa logica per te.
Questo documento descrive come configurare e utilizzare il connettore Beam Bigtable per leggere uno stream di modifiche utilizzando una pipeline Dataflow. Prima di leggere questo documento, ti consigliamo di leggere la Panoramica delle modifiche di streaming e di acquisire familiarità con Dataflow.
Alternative alla creazione di una pipeline personalizzata
Se non vuoi creare la tua pipeline Dataflow, puoi utilizzare una delle seguenti opzioni.
Puoi utilizzare un modello Dataflow fornito da Google.
Puoi anche utilizzare gli esempi di codice del tutorial per Bigtable come punto di partenza per il tuo codice.
Assicurati che il codice generato utilizzi
google cloud libraries-bom
26.14.0 o versioni successive.
Dettagli connettore
Il metodo del connettore Bigtable Beam, BigtableIO.readChangeStream
, ti consente di leggere uno stream di record di variazione dei dati (ChangeStreamMutation
) che puoi elaborare. Il connettore Bigtable Beam è
del componente Apache Beam GitHub
un repository attendibile. Per una descrizione del codice del connettore, consulta i commenti in
BigtableIO.java
.
Devi utilizzare il connettore con Beam versione 2.48.0 o successive. Controlla il supporto del runtime Apache Beam per assicurarti di utilizzare una versione di Java supportata. Dopodiché puoi implementare una pipeline che utilizza il connettore per Dataflow, che gestisce il provisioning e la gestione delle risorse e contribuisce alla scalabilità e all'affidabilità dell'elaborazione dei dati in streaming.
Per ulteriori informazioni sul modello di programmazione Apache Beam, consulta la documentazione di Beam.
Raggruppamento dei dati senza data e ora evento
I record delle modifiche dei dati trasmessi in streaming utilizzando il connettore Beam Bigtable non sono compatibili con le funzioni Dataflow che dipendono dai tempi degli eventi.
Come spiegato in Replica e watermark, un watermark basso potrebbe non avanzare se la replica per la partizione non ha raggiunto il resto dell'istanza. Quando una filigrana bassa smette di avanzare, può il flusso di modifiche si blocca.
Per evitare che il flusso si blocchi, il connettore Bigtable Beam produce tutti i dati con un timestamp di output zero. Il timestamp zero fa sì che Dataflow consideri tutti i dati modifica i record in modo che dati in ritardo. Di conseguenza, le funzionalità di Dataflow che dipendono dagli orari degli eventi compatibile con le modifiche in tempo reale di Bigtable. Nello specifico, non puoi utilizzare funzioni di windowing, Trigger all'ora dell'evento, o timer all'ora dell'evento.
In alternativa, puoi utilizzare GlobalWindows con attivatori di ora non basati sugli eventi per raggruppare questi dati in ritardo in riquadri, come dimostrato nell'esempio del tutorial. Per maggiori dettagli su trigger e riquadri, consulta Trigger nella guida alla programmazione Beam.
Scalabilità automatica
Il connettore supporta
Scalabilità automatica Dataflow,
che è abilitato per impostazione predefinita quando
Runner v2
(obbligatorio). L'algoritmo di scalabilità automatica di Dataflow prende in considerazione il backlog stimato dello stream di modifiche, che può essere monitorato nella pagina Monitoraggio di Dataflow nella sezione Backlog
. Usa il flag --maxNumWorkers
durante il deployment di
per limitare il numero di worker.
Per scalare manualmente la pipeline anziché utilizzare la scalabilità automatica, consulta Scalabilità manuale di una pipeline in modalità flusso.
Limitazioni
Nota le seguenti limitazioni prima di utilizzare il connettore Bigtable Beam con Dataflow.
Esecutore Dataflow V2
Il connettore può essere eseguito solo utilizzando
Dataflow Runner v2.
Per attivare questa opzione, specifica --experiments=use_runner_v2
negli argomenti della riga di comando. L'esecuzione con Runner v1 provoca l'errore della pipeline con
seguente eccezione:
java.lang.UnsupportedOperationException: BundleFinalizer unsupported by non-portable Dataflow
Snapshot
Il connettore non supporta Snapshot di Dataflow.
Duplicati
Il connettore Bigtable Beam esegue il flusso di modifiche per ogni chiave di riga e nell'ordine del timestamp di commit, ma poiché a volte si riavvia precedenti nello stream, può produrre duplicati.
Prima di iniziare
Prima di utilizzare il connettore, completa i seguenti prerequisiti.
Configura l'autenticazione
Per utilizzare gli Java esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia a riga di comando gcloud, quindi configura le credenziali predefinite dell'applicazione con le tue credenziali utente.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
Per ulteriori informazioni, consulta Set up authentication for a local development environment.
Per informazioni sulla configurazione dell'autenticazione per un ambiente di produzione, consulta Set up Application Default Credentials for code running on Google Cloud.
Attivare un flusso di modifiche
Per poter leggere una tabella, devi attivare un flusso di modifiche su una tabella. Puoi anche creare una nuova tabella con gli stream di modifiche abilitati.
Modificare la tabella dei metadati dello stream
Quando esegui lo streaming delle modifiche con Dataflow, il connettore Bigtable Beam crea una tabella dei metadati denominata __change_stream_md_table
per impostazione predefinita. La tabella dei metadati dello stream di modifiche gestisce
lo stato operativo del connettore e memorizza i metadati relativi ai record di variazione dei dati.
Per impostazione predefinita, il connettore crea la tabella nella stessa istanza della tabella viene riprodotta in streaming. Per assicurarti che la tabella funzioni correttamente, il profilo dell'app per la tabella dei metadati deve utilizzare il routing a cluster singolo e avere attivato le transazioni a riga singola.
Per saperne di più sulle modifiche in modalità flusso da Bigtable con del connettore Bigtable Beam, consulta la sezione BigtableIO documentazione.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per leggere una modifica di Bigtable utilizzando Dataflow, chiedi all'amministratore di concederti i seguenti ruoli IAM.
Per leggere le modifiche da Bigtable, devi disporre di questo ruolo:
- Amministratore Bigtable (roles/bigtable.admin) nell'istanza Bigtable che contiene la tabella che prevedi modifiche al flusso da
Per eseguire il job di Dataflow, devi disporre di questi ruoli:
- Sviluppatore Dataflow
(
roles/dataflow.developer
) sul progetto contenente le tue risorse Cloud - Worker Dataflow (roles/dataflow.worker) nel progetto contenente le risorse Cloud
- Amministratore oggetti Storage (roles/storage.objectAdmin) sui bucket Cloud Storage che prevedi di utilizzare
Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche riuscire a ottenere le autorizzazioni richieste ruoli personalizzati o altro ruoli predefiniti.
Aggiungere il connettore Bigtable Beam come dipendenza
Aggiungi al file Maven pom.xml un codice simile alla seguente dipendenza. La deve essere 2.48.0 o successiva.
<dependencies>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
<version>VERSION</version>
</dependency>
</dependencies>
Leggi il flusso di modifiche
Per creare una pipeline Dataflow per leggere i record di modifica dei dati,
configura il connettore e poi aggiungi trasformazioni e sink. Poi utilizza il connettore per leggere gli oggetti ChangeStreamMutation
in una pipeline Beam.
Gli esempi di codice in questa sezione, scritti in Java, mostrano come creare un
e usarla per convertire coppie chiave-valore in una stringa. Ogni coppia è composta da una chiave di riga e da un oggetto ChangeStreamMutation
. La pipeline converte le voci di ogni
oggetto in una stringa separata da virgole.
Crea la pipeline
Questo esempio di codice Java mostra come creare la pipeline:
Elabora i record di modifica dei dati
Questo esempio mostra come eseguire un ciclo per tutte le voci di un record di modifica dei dati per una riga e chiamare un metodo di conversione in stringa in base al tipo di voce.
Per un elenco dei tipi di voci che un record di variazione dei dati può contenere, consulta Che cosa contiene un record di variazione dei dati.
In questo esempio viene convertita una voce write:
In questo esempio viene convertita una voce relativa all'eliminazione di celle:
In questo esempio viene convertita l'eliminazione di una famiglia di colonne:
Monitoraggio
Le seguenti risorse nella console Google Cloud ti consentono di monitorare alle risorse Google Cloud durante l'esecuzione di una pipeline Dataflow legge una modifica in tempo reale di Bigtable:
In particolare, controlla le seguenti metriche:
- Nella pagina Monitoraggio di Bigtable, controlla queste
metriche:
- Dati sull'utilizzo della CPU per stream di modifiche nella metrica
cpu_load_by_app_profile_by_method_by_table
. Mostra lo stato del flusso di modifiche sull'utilizzo della CPU da parte del cluster. - Modifica dell'utilizzo dello spazio di archiviazione per le modifiche in tempo reale (byte)
(
change_stream_log_used_bytes
).
- Dati sull'utilizzo della CPU per stream di modifiche nella metrica
- Nella pagina Monitoraggio di Dataflow, controlla Dati aggiornamento, che mostra la differenza tra l'ora corrente e le filigrana. Dovrebbe durare circa due minuti, con picchi occasionali di un paio di minuti in più. Se la metrica di aggiornamento dei dati è costantemente più elevata oltre questa soglia, è probabile che la tua pipeline non disponga di risorse sufficienti e devono aggiungere altri worker Dataflow. L'aggiornamento dei dati indicano se i record delle modifiche dei dati vengono elaborati lentamente.
- La metrica
processing_delay_from_commit_timestamp_MEAN
Dataflow può indicare il tempo di elaborazione medio dei record di modifica dei dati durante la lifetime del job.
La metrica server/latencies
di Bigtable non è utile quando
di una pipeline Dataflow che legge una pipeline Dataflow
Modifiche in tempo reale Bigtable, perché riflettono la richiesta di flussi di dati
non la latenza nell'elaborazione del record delle modifiche dei dati. Latenza elevata in
un flusso di modifiche non significa che le richieste vengono elaborate lentamente; significa
la connessione è rimasta aperta per quel tempo.
Passaggi successivi
- Scopri come scrivere da Dataflow in Cloud Storage.
- Visualizza l'elenco completo delle metriche di monitoraggio fornite da Bigtable.