Utilizzare gli snapshot di Dataflow

Gli snapshot di Dataflow salvano lo stato di una pipeline di inserimento flussi, consentendoti di avviare una nuova versione del job Dataflow senza perdere lo stato. Gli snapshot sono utili per il backup e il ripristino, il test e il rollback degli aggiornamenti alle pipeline di inserimento flussi e altri scenari simili.

Puoi creare uno snapshot di Dataflow di qualsiasi job di flusso in esecuzione. Tieni presente che qualsiasi nuovo job creato da uno snapshot utilizza Streaming Engine. Puoi anche utilizzare uno snapshot di Dataflow per eseguire la migrazione della pipeline esistente a Streaming Engine, più efficiente e scalabile, con un tempo di riposo minimo.

Questa guida spiega come creare snapshot, gestirli e creare job da snapshot.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

Crea uno snapshot

Console

  1. Nella console Google Cloud, vai alla pagina Job di Dataflow.

    Vai a Job

    Viene visualizzato un elenco di job Dataflow con il relativo stato. Se non vedi alcun job in modalità flusso, devi eseguirne uno nuovo. Per un esempio di job di inserimento di flussi, consulta la guida rapida all'utilizzo dei modelli.

  2. Seleziona un job.
  3. Nella barra dei menu della pagina Dettagli job, fai clic su Crea snapshot.
  4. Nella finestra di dialogo Crea uno snapshot, seleziona una delle seguenti opzioni:
    • Senza origini dati: seleziona questa opzione per creare solo uno snapshot dello stato del job Dataflow.
    • Con origini dati: seleziona questa opzione per creare uno snapshot sia dello stato del job Dataflow sia dell'origine Pub/Sub.
  5. Fai clic su Crea.

gcloud

Crea uno snapshot:

gcloud dataflow snapshots create \
    --job-id=JOB_ID \
    --snapshot-ttl=DURATION \
    --snapshot-sources=true \
    --region=REGION

Sostituisci quanto segue:

  • JOB_ID: l'ID del tuo job di streaming
  • DURATION: il periodo di tempo (in giorni) prima della scadenza dello snapshot, dopodiché non è possibile creare altri job dallo snapshot. Il flag snapshot-ttl è facoltativo, quindi se non viene specificato, lo snapshot scade dopo 7 giorni. Specifica il valore nel seguente formato: 5d. La durata massima che puoi specificare è di 30 giorni (30d).
  • REGION: la regione in cui è in esecuzione il tuo job di streaming

Il flag snapshot-sources specifica se acquisire lo snapshot delle origini Pub/Sub insieme allo snapshot di Dataflow. Se true, viene eseguito automaticamente lo snapshot delle origini Pub/Sub e gli ID snapshot Pub/Sub vengono visualizzati nella risposta di output. Dopo aver eseguito il comando create controlla lo stato dello snapshot eseguendo il comando list o il comando describe.

Quando crei snapshot di Dataflow, si applicano le seguenti regole:

  • Gli snapshot Dataflow comportano un addebito per l'utilizzo del disco.
  • Gli snapshot vengono creati nella stessa regione del job.
  • Se la posizione del worker del job è diversa dalla regione del job, la creazione dello snapshot non va a buon fine. Consulta la guida sulle regioni di Dataflow.
  • Puoi acquisire snapshot di job non Streaming Engine solo se sono stati avviati o aggiornati dopo il 1° febbraio 2021.
  • Gli snapshot Pub/Sub creati con gli snapshot Dataflow vengono gestiti dal servizio Pub/Sub e sono soggetti a un addebito.
  • Uno snapshot Pub/Sub scade non oltre 7 giorni dalla sua creazione. La durata esatta viene determinata al momento della creazione dal backlog esistente nell'abbonamento di origine. Nello specifico, la durata dello snapshot Pub/Sub è 7 days - (age of oldest unacked message in the subscription). Ad esempio, prendiamo un abbonamento il cui messaggio non confermato più antico risale a 3 giorni fa. Se da questo abbonamento viene creato uno snapshot Pub/Sub, lo snapshot, che acquisisce sempre questo backlog di 3 giorni, finché esiste, scade tra 4 giorni. Consulta Riferimento allo snapshot Pub/Sub.
  • Durante l'operazione di snapshot, il job Dataflow viene messo in pausa e ripreso quando lo snapshot è pronto. Il tempo necessario dipende dalle dimensioni dello stato della pipeline. Ad esempio, il tempo necessario per acquisire snapshot nei job di Streaming Engine è in genere inferiore a quello dei job non Streaming Engine.
  • Puoi annullare il job mentre è in corso uno snapshot, annullando così lo snapshot.
  • Non puoi aggiornare o svuotare il job mentre è in corso un scatto. Devi attendere che il job venga ripreso dal processo di acquisizione di istantanee prima di poterlo aggiornare o svuotare.

Utilizzare la pagina degli snapshot

Dopo aver creato uno snapshot, puoi utilizzare la pagina Snapshot nella console Google Cloud per visualizzare e gestire gli snapshot del tuo progetto.

Se fai clic su uno snapshot, si apre la pagina Dettagli snapshot. Puoi visualizzare metadati aggiuntivi sullo snapshot, nonché un link al job di origine e a eventuali snapshot Pub/Sub.

Pagina dei dettagli degli snapshot di Dataflow in cui puoi trovare ulteriori informazioni su uno snapshot.

Elimina uno snapshot

L'eliminazione di uno snapshot è un modo per interrompere il processo di snapshot e riprendere il job. Inoltre, l'eliminazione degli snapshot di Dataflow non comporta l'eliminazione automatica degli snapshot Pub/Sub associati.

Console

  1. Nella console Google Cloud, vai alla pagina Snapshot di Dataflow.

    Vai a Snapshot

  2. Seleziona lo snapshot e fai clic su Elimina.
  3. Nella finestra di dialogo Elimina snapshot, fai clic su Elimina per confermare.

gcloud

Per eliminare uno snapshot:

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Sostituisci quanto segue:

  • SNAPSHOT_ID: il tuo ID snapshot
  • REGION: la regione in cui esiste lo snapshot

Per ulteriori informazioni, consulta la documentazione di riferimento del comando delete.

Creare un job da uno snapshot

Dopo aver creato uno snapshot, puoi ripristinare lo stato del job Dataflow creando un nuovo job dallo snapshot.

Java

Per creare un nuovo job da uno snapshot, utilizza entrambi i flag --createFromSnapshot e --enableStreamingEngine.

  • Nella shell o nel terminale, crea un nuovo job da uno snapshot. Ad esempio:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=MAIN_CLASS \
        -Dexec.args="--project=PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --inputFile=gs://apache-beam-samples/shakespeare/* \
        --output=gs://STORAGE_BUCKET/output \
        --runner=DataflowRunner \
        --enableStreamingEngine \
        --createFromSnapshot=SNAPSHOT_ID \
        --region=REGION"

    Sostituisci quanto segue:

    • MAIN_CLASS o MODULE: per le pipeline Java, la posizione della classe principale che contiene il codice della pipeline. Per le pipeline Python, la posizione del modulo contenente il codice della pipeline. Ad esempio, quando utilizzi l'esempio Conteggio parole, il valore è org.apache.beam.examples.WordCount.
    • PROJECT_ID: il tuo ID progetto Google Cloud
    • STORAGE_BUCKET: il bucket Cloud Storage che utilizzi per gli asset temporanei del job e l'output finale
    • SNAPSHOT_ID: l'ID dello snapshot da cui vuoi creare un nuovo job
    • REGION: la posizione in cui vuoi eseguire il nuovo job Dataflow

Python

Gli snapshot di Dataflow richiedono l'SDK Apache Beam per Python, versione 2.29.0 o successiva.

Per creare un nuovo job da uno snapshot, utilizza entrambi i flag --createFromSnapshot e --enableStreamingEngine.

  • Nella shell o nel terminale, crea un nuovo job da uno snapshot. Ad esempio:
    python -m MODULE \
        --project PROJECT_ID \
        --temp_location gs://STORAGE_BUCKET/tmp/ \
        --input gs://apache-beam-samples/shakespeare/* \
        --output gs://STORAGE_BUCKET/output \
        --runner DataflowRunner \
        --enable_streaming_engine \
        --create_from_snapshot=SNAPSHOT_ID \
        --region REGION \
        --streaming

    Sostituisci quanto segue:

    • MAIN_CLASS o MODULE: per le pipeline Java, la posizione della classe principale che contiene il codice della pipeline. Per le pipeline Python, la posizione del modulo contenente il codice della pipeline. Ad esempio, quando utilizzi l'esempio Conteggio parole, il valore è org.apache.beam.examples.WordCount.
    • PROJECT_ID: il tuo ID progetto Google Cloud
    • STORAGE_BUCKET: il bucket Cloud Storage che utilizzi per gli asset temporanei del job e l'output finale
    • SNAPSHOT_ID: l'ID dello snapshot da cui vuoi creare un nuovo job
    • REGION: la posizione in cui vuoi eseguire il nuovo job Dataflow

Quando crei job dagli snapshot Dataflow, si applicano le seguenti regole:

  • I job creati dagli snapshot devono essere eseguiti nella stessa regione in cui è archiviato lo snapshot.
  • Se uno snapshot di Dataflow include snapshot di origini Pub/Sub, i job creati da uno snapshot di Dataflow siseek automaticamente a questi snapshot di Pub/Sub come origini. Quando crei job da questo snapshot di Dataflow, devi specificare gli stessi argomenti Pub/Sub utilizzati dal job di origine.

  • Se uno snapshot Dataflow non include snapshot delle origini Pub/Sub e il job di origine utilizza un'origine Pub/Sub, devi specificare un argomento Pub/Sub quando crei job da questo snapshot Dataflow.

  • I nuovi job creati da uno snapshot sono comunque soggetti a un controllo di compatibilità dell'aggiornamento.

Limitazioni note

Ai snapshot di Dataflow si applicano le seguenti limitazioni:

  • Non puoi creare job dagli snapshot utilizzando i modelli o l'editor Dataflow SQL.
  • Il periodo di scadenza degli snapshot può essere impostato solo tramite Google Cloud CLI.
  • Gli snapshot di Dataflow supportano solo gli snapshot delle origini Pub/Sub.
  • Gli snapshot del sink non sono supportati. Ad esempio, non puoi creare uno snapshot di BigQuery quando crei uno snapshot di Dataflow.

Risoluzione dei problemi

Questa sezione fornisce istruzioni per la risoluzione dei problemi comuni riscontrati durante l'interazione con gli snapshot di Dataflow.

Prima di richiedere assistenza, assicurati di aver escluso i problemi relativi alle limitazioni note e alle seguenti sezioni sulla risoluzione dei problemi.

La richiesta di creazione di snapshot è stata rifiutata

Dopo che è stata inviata una richiesta di creazione di uno snapshot, dalla console Google Cloud o dalla gcloud CLI, il servizio Dataflow esegue un controllo dei prerequisiti e restituisce eventuali messaggi di errore. La richiesta di creazione di istantanee può essere rifiutata per vari motivi specificati nei messaggi di errore, ad esempio se un tipo di job non è supportato o una regione non è disponibile.

Se la richiesta viene rifiutata perché il job è troppo vecchio, devi aggiornarlo prima di richiedere un'istantanea.

Creazione dello snapshot non riuscita

La creazione di istantanee potrebbe non riuscire per diversi motivi. Ad esempio, il job di origine è stato annullato o il progetto non dispone delle autorizzazioni corrette per creare snapshot Pub/Sub. I log job-message del job contengono i messaggi di errore relativi alla creazione dell'istantanea. Se la creazione dello snapshot non va a buon fine, il job di origine viene ripreso.

Creazione di un job dallo snapshot non riuscita

Quando crei un job da uno snapshot, assicurati che lo snapshot esista e non sia scaduto. Il nuovo job deve essere eseguito su Streaming Engine.

Per i problemi comuni di creazione dei job, consulta la guida alla risoluzione dei problemi di Dataflow. In particolare, i nuovi job creati dagli snapshot sono sottoposti a un controllo di compatibilità dell'aggiornamento in cui il nuovo job deve essere compatibile con il job di origine di cui è stato eseguito lo snapshot.

Il job creato dallo snapshot avanza poco

I log job-message del job contengono messaggi di errore relativi alla creazione del job. Ad esempio, potresti notare che il job non riesce a trovare gli snapshot Pub/Sub. In questo caso, verifica che gli snapshot Pub/Sub esistano e non siano scaduti. Gli snapshot di Pub/Sub scadono non appena il messaggio più vecchio in uno snapshot risale a più di sette giorni fa. Gli snapshot Pub/Sub scaduti potrebbero essere rimossi automaticamente dal servizio Pub/Sub.

Per i job creati da snapshot di Dataflow che includono gli snapshot delle origini Pub/Sub, il nuovo job potrebbe avere backlog di Pub/Sub di grandi dimensioni da elaborare. L'autoscaling in streaming potrebbe aiutare il nuovo job a eliminare più rapidamente la coda.

Il job di origine di cui è stato acquisito lo snapshot potrebbe essere già in uno stato non corretto prima dell'acquisizione dello snapshot. Capire perché il job di origine non è in stato normale potrebbe aiutarti a risolvere i problemi del nuovo job. Per suggerimenti comuni per il debug dei job, consulta la guida alla risoluzione dei problemi di Dataflow.