Interromper um pipeline em execução

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Não é possível excluir um job do Dataflow, apenas interrompê-lo.

Para interromper um job do Dataflow use o Console do Google Cloud, o Cloud Shell, um terminal local instalado com a Google Cloud CLI ou a API REST Dataflow.

É possível interromper um job do Dataflow de uma das três maneiras a seguir:

  • Como cancelar um job. Este método serve para pipelines de streaming e em lote. O cancelamento de um job interrompe o processamento de dados, incluindo dados em buffer, pelo serviço do Dataflow. Saiba mais em Como cancelar um job.

  • Como drenar um job. Esse método serve apenas para pipelines de streaming. A drenagem de um job permite que o serviço do Dataflow conclua o processamento dos dados em buffer, interrompendo simultaneamente a ingestão de novos dados. Saiba mais em Como drenar um job.

  • Forçar o cancelamento de um job. Este método serve para pipelines de streaming e em lote. Forçar o cancelamento de um job interrompe imediatamente o serviço do Dataflow de processar todos os dados, incluindo dados armazenados em buffer. Antes do cancelamento forçado, você deve tentar um cancelamento regular. O cancelamento força é destinado apenas a jobs que ficaram presos no processo normal de cancelamento. Veja mais informações em Como cancelar um job.

Cancelar um job

Quando você cancela um job, o serviço do Dataflow o interrompe imediatamente.

As seguintes ações ocorrem ao cancelar um job:

  1. O serviço do Dataflow interrompe a ingestão e o processamento de dados.

  2. O serviço do Dataflow começa pela limpeza dos recursos do Google Cloud anexados ao job.

    Entre esses recursos, podem estar o desligamento de instâncias de worker do Compute Engine e o encerramento de conexões ativas com coletores ou fontes de E/S.

Informações importantes sobre o cancelamento de um job

  • O cancelamento de um job interrompe imediatamente o processamento do pipeline.

  • Ao cancelar um job, talvez você perca dados em trânsito. Dados em trânsito são os dados que já foram lidos, mas ainda estão sendo processados pelo pipeline.

  • Os dados gravados do pipeline em um coletor de saída antes de você cancelar o job ainda poderão ser acessados no coletor de saída.

  • Se a perda de dados não for um problema, cancelar o job garantirá que os recursos do Google Cloud associados a ele sejam encerrados o mais rápido possível.

Drenar um job

Quando você drena um job, o serviço do Dataflow conclui o job no estado atual. Para evitar a perda de dados ao desativar os pipelines de streaming, a melhor opção é drenar o job.

As seguintes ações ocorrem ao drenar um job:

  1. O job para de ingerir novos dados de fontes de entrada logo após receber a solicitação de drenagem (normalmente, em alguns minutos).

  2. O serviço do Dataflow preserva todos os recursos atuais, como instâncias de worker, para concluir o processamento e a gravação dos dados em buffer no pipeline.

  3. Quando todas as operações de processamento e gravação pendentes forem concluídas, o serviço do Dataflow encerrará os recursos do Google Cloud associados ao job.

Informações importantes sobre a drenagem de um job

  • Não é possível drenar um job de pipelines em lote.

  • O pipeline continua gerando custos de manutenção de todos os recursos associados do Google Cloud até que todos os processamentos e gravações sejam concluídos.

  • Se o código do pipeline de streaming incluir um timer de repetição, o job não poderá ser drenado.

  • O streaming do Dataflow é tolerante à reinicialização dos workers e não falha nos jobs de streaming quando há erros. Em vez disso, o serviço do Dataflow tenta novamente até que o usuário realize uma ação, como drenar, cancelar ou reinicializar do job. É recomendado drenar um job para evitar a perda de dados.

  • O Dataflow não confirma as mensagens até que o serviço do Dataflow confirme-as de maneira durável. Por exemplo, com o Kafka, isso pode ser visto como uma transferência segura da propriedade da mensagem do Kafka para o Dataflow, eliminando o risco de perda de dados.

  • Se o pipeline de streaming incluir um Splittable DoFn, será necessário truncar o resultado antes de executar a opção de drenagem. Saiba mais sobre como truncar Splittable DoFns na documentação do Apache Beam.

  • É possível atualizar um pipeline que está sendo drenado.

  • A drenagem de um job pode demorar bastante para ser concluída, por exemplo, quando o pipeline tem uma grande quantidade de dados em buffer.

  • É possível cancelar um job que está sendo drenado.

  • Em alguns casos, pode ser que o job do Dataflow não consiga concluir a operação de drenagem. Consulte os registros do job para encontrar a causa raiz e tomar as medidas adequadas.

Efeitos da drenagem de um job

Quando você drena um pipeline de streaming, o Dataflow fecha imediatamente qualquer janela em processamento e aciona todos os gatilhos.

Em uma operação de drenagem, o sistema não aguarda a conclusão de janelas pendentes com base no tempo.

Por exemplo, ao drenar um job, se o pipeline estiver há apenas 10 minutos em uma janela de duas horas, o Dataflow não aguardará o tempo restante para a conclusão da janela. Ele fechará a janela imediatamente com resultados parciais. O Dataflow faz as janelas abertas serem fechadas avançando a marca-d'água do sistema para o infinito. Essa funcionalidade também é válida para fontes de dados personalizadas.

Ao drenar um pipeline que usa uma classe de fonte de dados personalizada, o Dataflow interrompe a emissão de solicitações de novos dados, avança a marca-d'água do sistema para o infinito e chama o método finalize() da sua fonte no último checkpoint.

No Console do Google Cloud, é possível ver os detalhes das transformações do pipeline. O diagrama a seguir mostra os efeitos de uma operação de drenagem em processo. Observe que a marca-d'água está avançada para o valor máximo.

Uma visualização em etapas de uma operação de drenagem.

Figura 1. Uma visualização em etapas de uma operação de drenagem.

Forçar o cancelamento de um job

Quando você força o cancelamento de um job, o serviço do Dataflow interrompe o job imediatamente, vazando todas as VMs criadas pelo job. O cancelamento normal precisa ser feito pelo menos 30 minutos antes do cancelamento forçado.

As seguintes ações ocorrem ao cancelar um job:

  • O serviço do Dataflow interrompe a ingestão e o processamento de dados.

Informações importantes sobre o cancelamento de um job

  • O cancelamento de um job interrompe imediatamente o processamento do pipeline.

  • O cancelamento força de um job é destinado apenas a jobs que ficaram presos no processo normal de cancelamento.

  • As instâncias de worker que o job do Dataflow criou não são liberadas necessariamente, o que pode resultar em vazamentos de instâncias de worker.

Interromper um job

Antes de interromper um job, entenda os efeitos de cancelamento, drenagem ou força o cancelamento de um job.

Console

  1. Acesse a página Jobs do Dataflow.

    Acessar "Jobs"

  2. Clique no job que você quer interromper.

    Para interromper um job, o status dele precisa serem execução.

  3. Na página de detalhes do job, clique em Parar.

  4. Escolha uma destas opções:

    • Em um pipeline em lote, clique em Cancelar ou Forçar cancelamento.

    • Para um pipeline de streaming, clique em Cancelar, Drenar ou Forçar cancelamento.

  5. Confirme sua escolha clicando em Interromper job.

gcloud

Para drenar ou cancelar um job do Dataflow, use o comando gcloud dataflow jobs no Cloud Shell ou em um terminal local instalado com a CLI gcloud.

  1. Faça login no shell.

  2. Liste os IDs dos jobs do Dataflow em execução e anote o ID do job que você quer interromper:

    gcloud dataflow jobs list
    

    Se a sinalização --region não estiver definida, serão exibidos os jobs do Dataflow de todas as regiões disponíveis.

  3. Siga uma das seguintes ações:

    • Para drenar um job de streaming:

       gcloud dataflow jobs drain JOB_ID
      

      Substitua JOB_ID pelo ID do job copiado anteriormente.

    • Para cancelar um job em lote ou de streaming:

      gcloud dataflow jobs cancel JOB_ID
      

      Substitua JOB_ID pelo ID do job copiado anteriormente.

API

Para cancelar ou drenar um job usando a API REST do Dataflow, escolha projects.locations.jobs.update ou projects.jobs.update. No corpo da solicitação, transmita o estado do job necessário no campo requestedState da instância do job da API escolhida.

Importante:: usar projects.locations.jobs.update é recomendado, já que projects.jobs.update só permite atualizar o estado dos jobs em execução em us-central1.

  • Para cancelar o job, defina o estado dele como JOB_STATE_CANCELLED.

  • Para drenar o job, defina o estado dele como JOB_STATE_DRAINED.

Detectar a conclusão do job

Para detectar quando o cancelamento ou a drenagem do job foi concluído, use um dos seguintes métodos:

  • Usar um serviço de orquestração de fluxo de trabalho, como o Cloud Composer, para monitorar o job do Dataflow.
  • Execute o pipeline de maneira síncrona, de modo que as tarefas sejam bloqueadas até a conclusão do pipeline. Para mais informações, consulte Como controlar modos de execução em "Como definir opções de pipeline".
  • Use a ferramenta de linha de comando na Google Cloud CLI para pesquisar o status do job. Para ver uma lista de todos os jobs do Dataflow no projeto, execute o seguinte comando no shell ou no terminal:

    gcloud dataflow jobs list
    

    A saída mostra o ID, o nome, o status (STATE) e outras informações do job para cada um. Para mais informações, consulte Como usar a interface de linha de comando do Dataflow.

A seguir