Práticas recomendadas do Pub/Sub para o BigQuery

Nesta página, descrevemos as práticas recomendadas para otimizar um pipeline do Dataflow que lê do Pub/Sub e grava no BigQuery. Dependendo do seu caso de uso, as sugestões a seguir podem melhorar a performance.

Soluções iniciais para pendências de pipeline

Quando um pipeline do Pub/Sub para o BigQuery tem um backlog crescente e não consegue acompanhar as mensagens recebidas, siga estas etapas imediatas:

  • Aumente o prazo de confirmação do Pub/Sub:para a assinatura associada do Pub/Sub, aumente o prazo de confirmação para um valor um pouco maior que o tempo máximo esperado de processamento de mensagens. Isso impede que as mensagens sejam reenviadas prematuramente enquanto ainda estão sendo processadas.
  • Escalonar horizontalmente os workers:se a contagem de mensagens não confirmadas e o backlog de assinaturas estiverem crescendo rapidamente, a capacidade de processamento do pipeline provavelmente será insuficiente. Aumente o número de workers do Dataflow para lidar com o volume de mensagens.
  • Ative a espera exponencial:ative a espera exponencial para melhorar a forma como o pipeline lida com novas tentativas em problemas temporários, tornando-o mais resiliente.

Otimizações de código e pipeline de longo prazo

Para ter desempenho e estabilidade consistentes, recomendamos as seguintes mudanças arquitetônicas e de código:

  • Reduza as chamadas getTable para o BigQuery:o excesso de chamadas de método getTable pode levar à limitação de taxa e gargalos de desempenho. Para atenuar isso:
    • Armazena em cache as informações de existência da tabela na memória do worker para evitar chamadas repetidas para a mesma tabela.
    • Agrupe as chamadas getTable por pacote, em vez de cada elemento individual.
    • Refatore o código do pipeline para eliminar a necessidade de verificar a existência da tabela em todas as mensagens.
  • Use a API BigQuery Storage Write:para pipelines de streaming que gravam no BigQuery, migre das inserções de streaming padrão para a API Storage Write. A API Storage Write oferece melhor desempenho e cotas significativamente mais altas.
  • Use o runner do Dataflow legada para jobs de alta cardinalidade:para jobs que processam um número muito grande de chaves exclusivas (alta cardinalidade), o runner do Dataflow legada pode oferecer melhor desempenho do que o Runner v2, a menos que transformações entre linguagens sejam necessárias.
  • Otimize o espaço de chaves:o desempenho pode diminuir quando os pipelines operam com milhões de chaves ativas. Ajuste a lógica do pipeline para trabalhar em um espaço de chave menor e mais gerenciável.

Gerenciamento de recursos, cotas e configurações

A alocação e a configuração adequadas de recursos são essenciais para a integridade do pipeline:

  • Gerenciar cotas de forma proativa:monitore as cotas e solicite aumentos para qualquer cota que possa ser atingida durante eventos de escalonamento. Por exemplo, considere os seguintes eventos de escalonamento:
    • Uma alta taxa de chamadas para os métodos TableService.getTable ou tabledata.insertAll pode exceder o máximo de consultas por segundo (QPS). Para mais informações sobre limites e como solicitar mais cota, consulte Cotas e limites do BigQuery.
    • As cotas do Compute Engine para endereços IP e CPUs em uso podem exceder os limites máximos. Para mais informações sobre limites e como solicitar mais cota, consulte a visão geral de cotas e limites do Compute Engine.
  • Otimize a configuração do worker:para evitar erros de memória insuficiente (OOM) e melhorar a estabilidade:

A seguir