Interromper um pipeline em execução

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 o SDK do Cloud ou a API REST Dataflow.

É possível interromper um job do Dataflow de duas maneiras:

  • 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.

Como 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.

Como 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.

  • 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.

Como interromper um job

Antes de interromper um job, é preciso entender os efeitos de cancelar ou drenar 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. Siga uma das seguintes ações:

    • Para um pipeline em lote, clique em Cancelar.

    • Para um pipeline de streaming, clique em Cancelar ou Drenar.

  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 o SDK do Cloud.

  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.

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

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

A seguir