Utilizza gli snapshot Dataflow

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

Puoi creare uno snapshot Dataflow di qualsiasi job di inserimento di flussi in esecuzione. Tieni presente che ogni nuovo job creato da uno snapshot utilizza Streaming Engine. Puoi inoltre utilizzare uno snapshot di Dataflow per eseguire la migrazione della pipeline esistente a Streaming Engine, più efficiente e scalabile, con tempi di inattività minimi.

Questa guida spiega come creare snapshot, gestire gli snapshot e creare job dagli snapshot.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Dataflow, Compute Engine, Cloud Logging, Cloud Storage, JSON di Google Cloud Storage, BigQuery, Cloud Pub/Sub, Cloud Datastore e Cloud Resource Manager.

    Abilita le API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API Dataflow, Compute Engine, Cloud Logging, Cloud Storage, JSON di Google Cloud Storage, BigQuery, Cloud Pub/Sub, Cloud Datastore e Cloud Resource Manager.

    Abilita le API

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 insieme al relativo stato. Se non vedi alcun job di inserimento di flussi, devi eseguire un nuovo job di inserimento di flussi. Per un esempio di job di inserimento di flussi, consulta la guida rapida sull'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 uno snapshot solo dello stato del job Dataflow.
    • Con origini dati: seleziona questa opzione per creare uno snapshot dello stato del job Dataflow insieme a uno snapshot 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: il tuo ID job di streaming
  • DURATION: la quantità di tempo (in giorni) prima della scadenza dello snapshot, trascorso il quale non è possibile creare altri job dallo snapshot. Il flag snapshot-ttl è facoltativo; pertanto, se non è specificato, lo snapshot scade dopo 7 giorni. Specifica il valore nel seguente formato: 5d. La durata massima che puoi specificare è 30 giorni (30d).
  • REGION: la regione in cui è in esecuzione il job di streaming

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

Quando crei snapshot Dataflow, si applica quanto segue:

  • Gli snapshot di Dataflow sono soggetti a un addebito sull'utilizzo del disco.
  • Gli snapshot vengono creati nella stessa regione del job.
  • Se la località del worker del job è diversa dalla regione del job, la creazione dello snapshot non va a buon fine. Consulta la guida Regioni di Dataflow.
  • Puoi creare snapshot di job non di Streaming Engine solo se i job sono stati avviati o aggiornati dopo il 1° febbraio 2021.
  • Gli snapshot Pub/Sub creati con gli snapshot di Dataflow sono gestiti dal servizio Pub/Sub e sono a pagamento.
  • Uno snapshot Pub/Sub scade non oltre 7 giorni dopo la creazione. La sua durata esatta è determinata al momento della creazione dal backlog esistente nella sottoscrizione di origine. In particolare, la durata dello snapshot Pub/Sub è 7 days - (age of oldest unacked message in the subscription). Prendiamo ad esempio una sottoscrizione il cui messaggio non confermato meno recente risale a 3 giorni fa. Se da questa sottoscrizione viene creato uno snapshot Pub/Sub, lo snapshot, che acquisisce sempre il backlog di 3 giorni finché esiste lo snapshot, scade dopo 4 giorni. Consulta la pagina Riferimento agli snapshot Pub/Sub.
  • Durante l'operazione di snapshot, il job Dataflow si mette in pausa e riprende quando lo snapshot è pronto. Il tempo necessario dipende dalle dimensioni dello stato della pipeline. Ad esempio, il tempo necessario per creare snapshot sui job Streaming Engine è generalmente più breve rispetto ai job non di Streaming Engine.
  • Puoi annullare il job mentre è in corso uno snapshot.
  • Non puoi aggiornare o scaricare il job mentre è in corso uno snapshot. Devi attendere che il job venga ripristinato dal processo dello snapshot prima di poterlo aggiornare o svuotare.

Utilizzare la pagina Snapshot

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

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

Pagina dei dettagli degli snapshot Dataflow, dove puoi
trovare ulteriori informazioni su uno snapshot.

Elimina uno snapshot

L'eliminazione di uno snapshot è un modo per arrestare il processo di snapshot e riprendere il job. Inoltre, l'eliminazione degli snapshot 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 Istantanee

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

gcloud

Elimina uno snapshot:

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Sostituisci quanto segue:

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

Per maggiori informazioni, consulta la sezione di riferimento del comando delete.

Crea un job da uno snapshot

Dopo aver creato uno snapshot, puoi ripristinare lo stato del job Dataflow creando un nuovo job da quello 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 località della classe principale che contiene il codice della pipeline. Per le pipeline Python, la località del modulo che contiene il codice della pipeline. Ad esempio, quando si utilizza l'esempio Wordcount, il valore è org.apache.beam.examples.WordCount.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • STORAGE_BUCKET: il bucket Cloud Storage che utilizzi per gli asset job temporanei e l'output finale
    • SNAPSHOT_ID: l'ID snapshot dello snapshot da cui vuoi creare un nuovo job
    • REGION: la località in cui vuoi eseguire il nuovo job di Dataflow

Python

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

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 località della classe principale che contiene il codice della pipeline. Per le pipeline Python, la località del modulo che contiene il codice della pipeline. Ad esempio, quando si utilizza l'esempio Wordcount, il valore è org.apache.beam.examples.WordCount.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • STORAGE_BUCKET: il bucket Cloud Storage che utilizzi per gli asset job temporanei e l'output finale
    • SNAPSHOT_ID: l'ID snapshot dello snapshot da cui vuoi creare un nuovo job
    • REGION: la località in cui vuoi eseguire il nuovo job di Dataflow

Quando crei job dagli snapshot Dataflow, si applica quanto segue:

  • I job creati dagli snapshot devono essere eseguiti nella stessa regione in cui è archiviato lo snapshot.
  • Se uno snapshot Dataflow include snapshot di origini Pub/Sub, i job creati automaticamente da uno snapshot di Dataflow seek indirizzano automaticamente agli snapshot Pub/Sub come origini. Devi specificare gli stessi argomenti Pub/Sub utilizzati dal job di origine durante la creazione dei job da quello snapshot di Dataflow.

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

  • I nuovi job creati da uno snapshot sono comunque soggetti a un controllo della compatibilità degli aggiornamenti.

Limitazioni note

Le seguenti limitazioni si applicano agli snapshot Dataflow:

  • Non puoi creare job da snapshot utilizzando modelli o l'editor SQL di Dataflow.
  • Il periodo di scadenza degli snapshot può essere impostato solo tramite Google Cloud CLI.
  • Gli snapshot Dataflow supportano solo gli snapshot di origine Pub/Sub.
  • Gli snapshot dei sink non sono supportati. Ad esempio, non puoi creare uno snapshot BigQuery durante la creazione di uno snapshot Dataflow.

Risoluzione dei problemi

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

Prima di contattare l'assistenza, assicurati di aver escluso i problemi relativi alle limitazioni note e di aver esaminato le seguenti sezioni per la risoluzione dei problemi.

La richiesta di creazione di snapshot è stata rifiutata

Dopo aver inviato una richiesta di creazione di snapshot, dalla console Google Cloud o da gcloud CLI, il servizio Dataflow esegue un controllo delle precondizioni e restituisce eventuali messaggi di errore. La richiesta di creazione dello snapshot 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 uno snapshot.

Creazione dello snapshot non riuscita

La creazione dello snapshot 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 della creazione dello snapshot. Se la creazione dello snapshot non riesce, il job di origine riprende.

Creazione di un job da 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 problemi comuni relativi alla creazione di job, consulta la guida alla risoluzione dei problemi di Dataflow. In particolare, i nuovi job creati dagli snapshot sono soggetti a un controllo della compatibilità degli aggiornamenti in cui il nuovo job deve essere compatibile con il job di origine creato con snapshot.

Il job creato da uno snapshot fa pochi progressi

I log job-message del job contengono messaggi di errore per la creazione del job. Ad esempio, potresti vedere 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 Pub/Sub scadono non appena il messaggio meno recente di uno snapshot supera i sette giorni. Gli snapshot Pub/Sub scaduti potrebbero essere rimossi automaticamente dal servizio Pub/Sub.

Per i job creati da snapshot Dataflow che includono snapshot di origine Pub/Sub, il nuovo job potrebbe avere backlog Pub/Sub di grandi dimensioni da elaborare. La scalabilità automatica dei flussi di dati potrebbe aiutare il nuovo job a cancellare il backlog più velocemente.

Il job di origine creato con snapshot potrebbe essere già in stato non integro prima dell'esecuzione dello snapshot. Capire perché il job di origine non è integro potrebbe aiutare a risolvere i problemi del nuovo job. Per suggerimenti comuni sul debug dei job, consulta la guida alla risoluzione dei problemi di Dataflow.