Use instantâneos do Dataflow

As cópias instantâneas do Dataflow guardam o estado de um pipeline de streaming, o que lhe permite iniciar uma nova versão da tarefa do Dataflow sem perder o estado. Os instantâneos são úteis para fazer cópias de segurança e recuperação, testar e reverter atualizações para pipelines de streaming e outros cenários semelhantes.

Pode criar um instantâneo do Dataflow de qualquer tarefa de streaming em execução. Tenha em atenção que qualquer nova tarefa que criar a partir de uma imagem instantânea usa o Streaming Engine. Também pode usar uma captura instantânea do Dataflow para migrar o pipeline existente para o Streaming Engine mais eficiente e escalável com um tempo de inatividade mínimo.

Este guia explica como criar instantâneos, gerir instantâneos e criar tarefas a partir de instantâneos.

Antes de começar

  1. Sign in to your Google Cloud Platform 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify 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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Criar um instantâneo

    Consola

    1. Na Google Cloud consola, aceda à página Dataflow Tarefas.

      Aceda a Empregos

      É apresentada uma lista de tarefas do Dataflow juntamente com o respetivo estado. Se não vir nenhuma tarefa de streaming, tem de executar uma nova tarefa de streaming. Para ver um exemplo de uma tarefa de streaming, consulte o Início rápido de utilização de modelos.

    2. Selecione uma tarefa.
    3. Na barra de menu da página Detalhes da tarefa, clique em Criar resumo.
    4. Na caixa de diálogo Criar uma imagem instantânea, selecione uma das seguintes opções:
      • Sem origens de dados: selecione esta opção para criar apenas uma imagem instantânea do estado da tarefa do Dataflow.
      • Com origens de dados: selecione esta opção para criar uma imagem instantânea do estado da tarefa do Dataflow, juntamente com uma imagem instantânea da origem do Pub/Sub.
    5. Clique em Criar.

    gcloud

    Crie um instantâneo:

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

    Substitua o seguinte:

    • JOB_ID: o ID da tarefa de streaming
    • DURATION: a quantidade de tempo (em dias) antes de o instantâneo expirar, após o qual não é possível criar mais tarefas a partir do instantâneo. A flag snapshot-ttl é opcional, pelo que, se não for especificada, a imagem instantânea expira em 7 dias. Especifique o valor no seguinte formato: 5d. A duração máxima que pode especificar é de 30 dias (30d).
    • REGION: a região onde a sua tarefa de streaming está a ser executada

    A flag snapshot-sources especifica se deve ser tirada uma captura instantânea das origens do Pub/Sub juntamente com a captura instantânea do Dataflow. Se true, as origens do Pub/Sub são criadas automaticamente como instantâneos, e os IDs dos instantâneos do Pub/Sub são apresentados na resposta de saída. Depois de executar o comando create, verifique o estado da captura de ecrã executando o comando list ou o comando describe.

    Aplicam-se as seguintes condições quando cria instantâneos do Dataflow:

    • As cópias instantâneas do Dataflow incorrem num custo de utilização do disco.
    • As capturas de ecrã são criadas na mesma região que a tarefa.
    • Se a localização do trabalhador da tarefa for diferente da região da tarefa, a criação da imagem instantânea falha. Consulte o guia de regiões do Dataflow.
    • Só pode tirar capturas de ecrã de tarefas do Streaming Engine se as tarefas tiverem sido iniciadas ou atualizadas após 1 de fevereiro de 2021.
    • Os instantâneos do Pub/Sub criados com o Dataflow são geridos pelo serviço Pub/Sub e incorrem numa cobrança.
    • Um instantâneo do Pub/Sub expira no máximo 7 dias após a respetiva criação. A duração total exata é determinada no momento da criação pelo atraso existente na subscrição de origem. Especificamente, a duração total do instantâneo do Pub/Sub é de 7 days - (age of oldest unacked message in the subscription). Por exemplo, considere uma subscrição cuja mensagem não reconhecida mais antiga tem 3 dias. Se for criado um instantâneo do Pub/Sub a partir desta subscrição, o instantâneo, que captura sempre este backlog de 3 dias, expira em 4 dias. Consulte a referência do instantâneo do Pub/Sub.
    • Durante a operação de instantâneo, a tarefa do Dataflow é pausada e retomada quando o instantâneo estiver pronto. O tempo necessário depende do tamanho do estado do pipeline. Por exemplo, o tempo necessário para tirar instantâneos em tarefas do Streaming Engine é geralmente mais curto do que em tarefas que não são do Streaming Engine.
    • Pode cancelar a tarefa enquanto um instantâneo está em curso, o que cancela o instantâneo.
    • Não pode atualizar nem esvaziar a tarefa enquanto um instantâneo estiver em curso. Tem de aguardar até que a tarefa seja retomada a partir do processo de instantâneo antes de poder atualizar ou esgotar a tarefa.

    Use a página de instantâneos

    Depois de criar um instantâneo, pode usar a página Instantâneos na Google Cloud consola para ver e gerir os instantâneos do seu projeto.

    Ao clicar numa captura instantânea, abre a página Detalhes da captura instantânea. Pode ver metadados adicionais acerca do instantâneo, bem como um link para a tarefa de origem e quaisquer instantâneos do Pub/Sub.

    Página de detalhes dos resumos do fluxo de dados, onde pode obter mais informações sobre um resumo.

    Elimine um instantâneo

    A eliminação de um instantâneo é uma forma de parar o processo de instantâneo e retomar a tarefa. Além disso, a eliminação de instantâneos do Dataflow não elimina automaticamente os instantâneos do Pub/Sub associados.

    Consola

    1. Na Google Cloud consola, aceda à página Dataflow Capturas de ecrã.

      Aceder a Resumos

    2. Selecione a captura de ecrã e clique em Eliminar.
    3. Na caixa de diálogo Eliminar instantâneo, clique em Eliminar para confirmar.

    gcloud

    Elimine um instantâneo:

    gcloud dataflow snapshots delete SNAPSHOT_ID \
        --region=REGION

    Substitua o seguinte:

    • SNAPSHOT_ID: o ID do seu resumo
    • REGION: a região onde o seu resumo existe

    Para mais informações, consulte a delete referência de comandos.

    Crie uma tarefa a partir de um instantâneo

    Depois de criar uma imagem instantânea, pode restaurar o estado da tarefa do Dataflow criando uma nova tarefa a partir dessa imagem instantânea.

    Java

    Para criar uma nova tarefa a partir de uma captura de ecrã, use os indicadores --createFromSnapshot e --enableStreamingEngine.

    • Na shell ou no terminal, crie uma nova tarefa a partir de uma captura de ecrã. For example:
      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"

      Substitua o seguinte:

      • MAIN_CLASS ou MODULE: Para pipelines Java, a localização da classe principal que contém o código do pipeline. Para pipelines Python, a localização do módulo que contém o código do pipeline. Por exemplo, quando usa o exemplo Wordcount, o valor é org.apache.beam.examples.WordCount.
      • PROJECT_ID: o ID do seu Google Cloud projeto
      • STORAGE_BUCKET: o contentor do Cloud Storage que usa para recursos de tarefas temporários e o resultado final
      • SNAPSHOT_ID: o ID do instantâneo a partir do qual quer criar uma nova tarefa
      • REGION: a localização onde quer executar a nova tarefa do Dataflow

    Python

    As capturas instantâneas do Dataflow requerem o SDK do Apache Beam para Python, versão 2.29.0 ou posterior.

    Para criar uma nova tarefa a partir de uma captura de ecrã, use os indicadores --createFromSnapshot e --enableStreamingEngine.

    • Na shell ou no terminal, crie uma nova tarefa a partir de uma captura de ecrã. For example:
      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

      Substitua o seguinte:

      • MAIN_CLASS ou MODULE: Para pipelines Java, a localização da classe principal que contém o código do pipeline. Para pipelines Python, a localização do módulo que contém o código do pipeline. Por exemplo, quando usa o exemplo Wordcount, o valor é org.apache.beam.examples.WordCount.
      • PROJECT_ID: o ID do seu Google Cloud projeto
      • STORAGE_BUCKET: o contentor do Cloud Storage que usa para recursos de tarefas temporários e o resultado final
      • SNAPSHOT_ID: o ID do instantâneo a partir do qual quer criar uma nova tarefa
      • REGION: a localização onde quer executar a nova tarefa do Dataflow

    Aplicam-se as seguintes condições quando cria tarefas a partir de instantâneos do Dataflow:

    • As tarefas criadas a partir de instantâneos têm de ser executadas na mesma região onde o instantâneo está armazenado.
    • Se uma imagem instantânea do Dataflow incluir imagens instantâneas de origens do Pub/Sub, as tarefas criadas a partir de uma imagem instantânea do Dataflow são automaticamente seek associadas a essas imagens instantâneas do Pub/Sub como origens. Tem de especificar os mesmos tópicos do Pub/Sub usados pela tarefa de origem quando criar tarefas a partir dessa captura instantânea do Dataflow.

    • Se um instantâneo do Dataflow não incluir instantâneos de origens do Pub/Sub e a tarefa de origem usar uma origem do Pub/Sub, tem de especificar um tópico do Pub/Sub quando criar tarefas a partir desse instantâneo do Dataflow.

    • As novas tarefas criadas a partir de um resumo continuam sujeitas a uma verificação de compatibilidade de atualizações.

    Limitações conhecidas

    Aplicam-se as seguintes limitações às cópias instantâneas do Dataflow:

    • Não pode criar tarefas a partir de instantâneos com modelos nem com o editor do Dataflow SQL.
    • Não pode atualizar nem esgotar uma tarefa enquanto um resumo estiver em curso. Tem de aguardar até que a tarefa seja retomada a partir do processo de instantâneo antes de poder atualizar ou esgotar a tarefa.
    • O período de validade da imagem instantânea só pode ser definido através da CLI do Google Cloud.
    • As capturas de ecrã de sinks não são suportadas. Por exemplo, não pode criar uma cópia instantânea do BigQuery quando cria uma cópia instantânea do Dataflow.

    Resolução de problemas

    Esta secção fornece instruções para resolver problemas comuns encontrados quando interage com as capturas instantâneas do Dataflow.

    Antes de contactar o apoio técnico, certifique-se de que excluiu problemas relacionados com as limitações conhecidas e nas seguintes secções de resolução de problemas.

    O pedido de criação de uma captura de ecrã é rejeitado

    Depois de ser enviado um pedido de criação de uma captura instantânea a partir da Google Cloud consola ou da CLI gcloud, o serviço Dataflow executa uma verificação de pré-condição e devolve quaisquer mensagens de erro. O pedido de criação de instantâneos pode ser rejeitado por vários motivos especificados nas mensagens de erro, por exemplo, se um tipo de tarefa não for suportado ou se uma região estiver indisponível.

    Se o pedido for rejeitado porque a tarefa é demasiado antiga, tem de atualizar a tarefa antes de pedir um resumo.

    Falha na criação do instantâneo

    A criação de instantâneos pode falhar por vários motivos. Por exemplo, a tarefa de origem foi cancelada ou o projeto não tem as autorizações corretas para criar instantâneos do Pub/Sub. Os registos job-message da tarefa contêm mensagens de erro da criação do resumo. Se a criação da imagem instantânea falhar, a tarefa de origem é retomada.

    Falha ao criar uma tarefa a partir do instantâneo

    Quando cria uma tarefa a partir de um instantâneo, certifique-se de que o instantâneo existe e não expirou. A nova tarefa tem de ser executada no Streaming Engine.

    Para problemas comuns de criação de tarefas, consulte o guia de resolução de problemas do Dataflow. Em particular, as novas tarefas criadas a partir de resumos estão sujeitas a uma verificação de compatibilidade de atualização em que a nova tarefa tem de ser compatível com a tarefa de origem resumida.

    A tarefa criada a partir do instantâneo faz pouco progresso

    Os registos job-message da tarefa contêm mensagens de erro para a criação de tarefas. Por exemplo, pode ver que a tarefa não consegue encontrar os instantâneos do Pub/Sub. Neste caso, verifique se as cópias instantâneas do Pub/Sub existem e não expiraram. As capturas instantâneas do Pub/Sub expiram assim que a mensagem mais antiga numa captura instantânea tiver mais de sete dias. Os instantâneos do Pub/Sub expirados podem ser removidos automaticamente pelo serviço Pub/Sub.

    Para tarefas criadas a partir de instantâneos do Dataflow que incluem instantâneos de origem do Pub/Sub, a nova tarefa pode ter grandes atrasos do Pub/Sub para processar. O ajuste automático de streaming pode ajudar a nova tarefa a limpar o atraso mais rapidamente.

    A tarefa de origem com instantâneo pode já estar num estado não saudável antes de o instantâneo ter sido tirado. Compreender por que motivo a tarefa de origem não está em bom estado pode ajudar a resolver problemas da nova tarefa. Para ver sugestões comuns de depuração de tarefas, consulte o guia de resolução de problemas do Dataflow.