Usar o Insights do Dataflow

É possível usar o Dataflow Insights para otimizar o desempenho do job. Este tópico demonstra como interagir com o Dataflow Insights usando gcloud ou a API REST. Também é possível analisar insights no Console do Dataflow. Para mais informações sobre a revisão de insights no console, consulte Recomendações.

Visão geral

O Dataflow Insights fornece insights sobre como melhorar o desempenho do job, reduzir custos e solucionar erros. O Dataflow Insights faz parte do serviço Recommender e está disponível por meio do tipo google.dataflow.diagnostics.Insight.

Ao trabalhar com o Dataflow Insights, lembre-se de que algumas recomendações podem não ser relevantes para seu caso de uso.

Antes de começar

Antes de começar a usar os insights de recursos, conclua as etapas a seguir.

  1. Ative a API Recommender.
  2. Verifique se a sua conta tem as seguintes permissões:

    • recommender.dataflowDiagnosticsInsights.get
    • recommender.dataflowDiagnosticsInsights.list
    • recommender.dataflowDiagnosticsInsights.update

    É possível conceder essas permissões individualmente ou então um dos papéis a seguir:

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin

Solicitar insights do Dataflow

É possível listar os insights do Dataflow como mostrado abaixo. Veja outros tipos de interações de insights no guia de insights para a API Recommender.

Listar insights do Dataflow

Para listar todos os insights do Dataflow para seu projeto em uma determinada região, use um dos seguintes métodos:

gcloud

Use o comando gcloud recomendador insights list para ver todos os insights do Dataflow para seu projeto em uma região especificada.

Antes de executar o comando, substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto para o qual você quer listar insights.
  • REGION: a região em que os jobs do Dataflow estão em execução. Por exemplo, us-west1.
gcloud recommender insights list --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

A saída lista todos os insights do Dataflow para o projeto na região especificada.

REST

Use o método insights.list da API Recommender para listar todos os insights do Dataflow para seu projeto em uma região especificada.

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto para o qual você quer listar insights.
  • REGION: a região em que os jobs do Dataflow estão em execução. Por exemplo, us-west1.

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights

Para enviar a solicitação usando curl (Linux, macOS ou Cloud Shell), execute o seguinte comando:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"

Receber um único insight do Dataflow

Para mais informações sobre um único insight, incluindo a descrição, o status e as recomendações associadas, use um dos seguintes métodos:

gcloud

Use o comando gcloud recomendador insights describe com seu ID de insight para visualizar informações sobre um único insight. Antes de executar o comando, substitua os seguintes valores:

  • INSIGHT_ID: o ID do insight que você quer ver.
  • PROJECT_ID: o ID do projeto para o qual você quer listar insights.
  • REGION: a região em que os jobs do Dataflow estão em execução. Por exemplo, us-west1.
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

A saída mostra os insights detalhados.

REST

O método insights.get da API Recommender recebe um único insight. Antes de usar os dados da solicitação, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto para o qual você quer listar insights.
  • REGION: a região em que os jobs do Dataflow estão em execução. Por exemplo, us-west1.
  • INSIGHT_ID: o ID do insight que você quer ver.

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID

Para enviar a solicitação usando curl (Linux, macOS ou Cloud Shell), execute o seguinte comando:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"

Interpretar insights do Dataflow

Depois de receber um único insight, é possível analisar o conteúdo para entender o padrão de uso de recursos destacado Além dos atributos de insight padrão, o Dataflow Insights fornece os seguintes subtipos:

  • AUTOSCALING_NOT_ENABLED: o escalonamento automático pode estar ativado. O job tem alta utilização da CPU e está usando o número máximo de workers definidos. Ativar o escalonamento automático pode melhorar o desempenho.
  • HIGH_FAN_OUT: uma quebra de fusão pode ser inserida após uma ou mais transformações para aumentar o paralelismo.
  • MAX_NUM_WORKERS: Escalonamento automático: o número máximo de workers pode ser aumentado O job está usando escalonamento automático, tem alta utilização da CPU e está usando o número máximo de workers definidos. O aumento do número máximo de workers pode melhorar o desempenho.
  • WORKER_OUT_OF_MEMORY: alguns dos workers do job falharam devido à memória insuficiente, o que poderia deixar o job lento ou causar uma falha.
  • PREBUILD_NOT_UTILIZED: use o fluxo de trabalho de pré-criação da imagem de worker para melhorar o tempo de inicialização e a confiabilidade do escalonamento automático do worker.
  • ACTIVE_KEYS (prévia): o número total de chaves ativas é menor que o número total de núcleos, e o escalonamento vertical não vai ajudar.
  • LONG_WORK_ITEM: o trabalho em uma fase combinada está demorando muito para ser processado, indicando uma operação lenta ou travada.

Para saber mais sobre como reduzir problemas identificados pelo Dataflow Insights, consulte Insights.

O Insights do Dataflow também fornece um campo content especial que contém subcampos com informações e metadados adicionais sobre um insight. Dependendo do seu caso de uso, os seguintes subcampos content podem ser úteis:

  • jobName: o nome do job do Dataflow.
  • description: uma descrição do insight em inglês.
  • title: o título do insight em inglês.

Insights

Alta distribuição de dados detectada.

Quando o Dataflow detecta que um job tem uma ou mais transformações com fan-out, a seguinte mensagem é exibida:

High fan-out detected

Isso ocorre quando um ParDo com uma alta proporção de contagem de elementos de saída para entrada é mesclado com um ParDo subsequente. Nessa situação, a segunda ParDo é executada sequencialmente com a primeira, o que força todos os elementos de saída de uma determinada entrada ao mesmo worker e reduz o paralelismo e desacelera o desempenho.

Para resolver o problema:

  • Insira um GroupByKey e desagrupe após o primeiro ParDo. O serviço Cloud Dataflow nunca faz agrupamentos de operações ParDo em uma agregação. Para mais informações, consulte Otimização do Fusion.
  • Transmita a PCollection intermediária como uma entrada secundária para outro ParDo. O serviço Dataflow sempre materializa entradas secundárias.
  • Insira uma etapa de ordem aleatória. A realocação evita a fusão, verifica os dados e reconfigura a estratégia de gestão de janelas para que nenhum dado seja descartado. A reordenação é compatível com o Dataflow, mesmo que esteja marcada como obsoleta na documentação do Apache Beam. Lembre-se que o embaralhamento dos dados pode aumentar o custo de execução do pipeline.

Escalonamento automático: o número máximo de workers pode ser aumentado

Quando o Dataflow detecta que um job está usando o número máximo de workers permitidos, maxNumWorkers (ou max_num_workers) e que o job pode usar mais workers se isso máximo foi aumentado, a seguinte mensagem aparece:

maximum number of workers could be increased

Por exemplo, essa recomendação ocorre em um job de streaming ou em lote que tenha maxNumWorkers definido como 50 quando todos os 50 workers estiverem sendo usados com uma utilização média de CPU do worker acima de 80%. Essa recomendação também ocorre para jobs de streaming que têm maxNumWorkers definido como 50 quando todos os 50 workers estão sendo usados com uma utilização média de CPU do worker acima de 50%, e o tempo de processamento estimado do job é maior que 2 minutos.

Normalmente, aumentar maxNumWorkers aumenta a capacidade do pipeline. Um pipeline em lote pode ser concluído em menos tempo, e um pipeline de streaming pode processar picos maiores de dados e processar mais elementos por segundo. No entanto, isso pode aumentar. Para mais informações, consulte Preços de recursos do worker. Para detalhes sobre como esse algoritmo funciona e como configurá-lo, consulte o Guia de escalonamento automático.

Para resolver o problema:

  • Aumente ou remova a opção de pipeline maxNumWorkers. Sem a opção, o Dataflow usa os padrões listados no Guia de escalonamento automático.
  • Não há problema em não fazer nada se o desempenho do pipeline for adequado.
    • Para pipelines em lote, verifique se o tempo total de execução atende aos seus requisitos.
    • Para pipelines de streaming, verifique o gráfico Atualização de dados na guia Métricas do job da página do job. Verifique se os valores no gráfico não aumentam continuamente e se estão dentro dos limites aceitáveis.

Escalonamento automático: definir o número inicial de workers pode melhorar o desempenho do job

Quando o Dataflow detecta que um job está usando um determinado número de workers por mais de 50% do tempo de execução, definir o número inicial de workers para o valor recomendado pode melhorar o desempenho do job reduzindo o tempo de execução para jobs em lote ou impedir que o backlog aumente ao atualizar um job de streaming.

Os workers estão falhando com erros de memória insuficiente

Quando o Dataflow detecta que os workers de um job estão falhando devido a erros de memória insuficiente, a seguinte mensagem aparece:

Some workers are out of memory

Alguns workers do job falharam devido à memória insuficiente. Embora seja possível concluir o job, também é possível que esses erros impeçam a conclusão do job ou deixem o desempenho mais lento.

Tente as seguintes sugestões:

Fluxo de trabalho pré-criado não utilizado

Quando o Dataflow detecta um pipeline em que o fluxo de trabalho de pré-criação da imagem do worker não é utilizado, a seguinte mensagem aparece:

pre-build workflow not utilized

Quando o fluxo de trabalho de pré-criação da imagem do worker não é utilizado, o pipeline tem dependências instaladas repetidamente no ambiente de execução. Essa configuração atrasa o tempo de inicialização do worker, o que diminui a capacidade de processamento do job e causa um comportamento não confiável de escalonamento automático.

Para resolver esse problema, use o fluxo de trabalho de pré-criação da imagem do worker ao iniciar o pipeline. Para mais informações, consulte Dependências do Python pré-criadas.

Se um contêiner pré-criado e personalizado já estiver em uso, para evitar instalações desnecessárias, adicione a opção "--sdk_location=container" e remova as seguintes opções:

  • "--setup_file"
  • "--requirements_file"
  • "--extra_package(s)"

As chaves ativas estão baixas

Quando o Dataflow detecta que um job está ficando para trás porque o número de chaves ativas é menor que o número total de núcleos e o escalonamento vertical não ajuda, a seguinte mensagem é exibida:

Active keys can be increased

Para executar o código do usuário em jobs, o Dataflow usa workers. Cada linha de execução mapeia para uma chave que é responsável por um conjunto de dados que será processado, e uma chave só pode ser executada em um único núcleo por vez por motivos de correção.

Em alguns casos, alguns núcleos ficam sobrecarregados enquanto outros ficam inativos. Para resolver esse problema, aumente o número de chaves, o que também aumenta o número de linhas de execução ativas.

Possíveis soluções para aumentar as chaves: - É possível aumentar o número de chaves usando um tipo de chave mais específico. Por exemplo, se o tipo de chave for IP address, menos chaves estarão disponíveis. Porém, se você mudar o tipo de chave para IP + [user identifier], mais chaves estarão disponíveis, o que aumenta o paralelismo. - Para pipelines que gravam no BigQuery, em que os coletores podem ser o gargalo, consulte este artigo. - Para outras origens/coletores, verifique se ele tem um parâmetro numShards e o aumente. Em geral, um fragmento é mapeado para uma chave. — Para ver orientações mais gerais sobre nosso modelo de execução, consulte este artigo. - A divergência pode ser usada para usar uma chave de entrada e adicionar uma hash de chave a ela, produzindo várias chaves de saída. Referência

O tempo está acabando

Quando o Dataflow detecta que o trabalho demorou muito para concluir o processamento, a seguinte mensagem é exibida:

Stage spending too long on work

O Dataflow envia o trabalho para os estágios combinados no pacote de elementos a serem processados e cada pacote é considerado concluído depois que todos os elementos e as saídas deles são processados para o cenário. Os pipelines de streaming são otimizados em pacotes de trabalho que levam menos de um minuto para serem totalmente processados. Portanto, longos tempos de processamento podem causar mais problemas de desempenho nos pipelines.

Esse problema pode ser causado por transformações de usuário travadas ou lentas. Essas transformações podem ser identificadas por avisos emitidos no Cloud Logging e na guia "Diagnóstico", com as principais frases "Operação em andamento" ou "Processamento parado". Para diagnosticar se esse problema é causado por uma transformação do usuário, use o Cloud Profiler para inspecionar o desempenho das transformações de usuário. Em seguida, rastreie qual código está causando a lentidão e com que frequência. Para mais informações, consulte Como solucionar erros comuns do Dataflow.

Se a investigação revelar que os longos tempos de processamento não são causados por transformações de usuário, recomendamos entrar em contato com o suporte do Cloud e descrever as etapas executadas para investigar.

Vaga travada no item de trabalho

Quando o Dataflow detecta que uma chave está travada porque um único item de trabalho falhou repetidamente e depois foi repetido, a seguinte mensagem é exibida:

Job is stuck due to failed and retried work item

No Dataflow, todas as mensagens em um pipeline são processadas com uma chave específica. Quando ocorre um erro durante o processamento de uma mensagem, ela é repetida. É aceitável que uma mensagem seja repetida duas ou três vezes. No entanto, se erros ocorrem várias vezes, como dez vezes seguidas, isso geralmente indica um problema fundamental com o código do pipeline. Quando uma mensagem específica em uma chave é repetida, outras mensagens na mesma chave não podem progredir. Se uma mensagem falhar 10 ou mais vezes, o problema provavelmente não será resolvido sozinho. Essa falha de mensagem pode causar problemas de pipeline, como:

  • atrasar a marca-d'água;
  • acumular backlog;
  • impedir que uma operação de drenagem seja concluída.

Para depurar esse problema, investigue o estágio que a recomendação informou e analise os registros para identificar o código com falha. Em seguida, atualize o job com o novo código do pipeline para destravar o job.

Streaming Engine não ativado

Quando o Dataflow detecta que um job de streaming não tem o Streaming Engine ativado, a seguinte mensagem é exibida:

This job isn't using Streaming Engine. It might benefit from having Streaming Engine enabled.

O uso do Streaming Engine tem vários benefícios em potencial, incluindo melhor escalonamento automático horizontal, melhor compatibilidade e redução do uso de recursos de CPU, memória e armazenamento em disco permanente nas VMs de worker. O Streaming Engine também é compatível com faturamento baseado em recursos.