Às vezes, Data pipelines têm picos no tráfego publicado. Os picos de tráfego podem sobrecarregar os assinantes, a menos que você esteja preparado para isso. Uma solução simples para evitar picos de tráfego é aumentar dinamicamente os recursos do assinante do Pub/Sub para processar mais mensagens. No entanto, essa solução pode aumentar os custos ou não funcionar instantaneamente. Por exemplo, talvez você precise de muitas VMs.
O controle de fluxo no lado do assinante permite que ele regule a taxa de ingestão de mensagens. Assim, o controle de fluxo lida com picos de tráfego sem aumentar os custos ou até que o assinante seja ampliado.
O controle de fluxo é um recurso disponível na biblioteca de cliente de alto nível do Pub/Sub. Também é possível implementar sua própria programação de controle de fluxo ao usar uma biblioteca de cliente de baixo nível.
Importante: se você tiver picos repentinos de tráfego para mensagens publicadas, use o controle de fluxo no cliente assinante de pull para resolver os picos transitórios.
A necessidade de controle de fluxo indica que as mensagens estão sendo publicadas em uma taxa maior do que estão sendo consumidas. Se esse cenário for um estado persistente, em vez de um pico temporário no volume de mensagens, considere aumentar o número de instâncias de cliente assinante.
Configuração do controle de fluxo
O controle de fluxo permite configurar o número máximo de bytes alocados para solicitações pendentes e o número máximo de mensagens pendentes permitidas. Defina esses limites de acordo com a capacidade de processamento das máquinas cliente.
Os valores padrão das variáveis de controle de fluxo e os nomes das variáveis podem variar entre as bibliotecas de cliente. Por exemplo, na biblioteca de cliente Java, as seguintes variáveis configuram o controle de fluxo:
setMaxOutstandingElementCount(): define o número máximo de mensagens para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.
setMaxOutstandingRequestBytes(): define o tamanho máximo das mensagens para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.
Se o limite de setMaxOutstandingElementCount() ou setMaxOutstandingRequestBytes() for excedido, o cliente assinante não vai extrair mais mensagens. Esse comportamento continua até que as mensagens
já extraídas sejam confirmadas ou negativamente confirmadas.
Assim, podemos alinhar a capacidade de processamento com o custo associado à execução de mais assinantes.
Exemplos de código para controle de fluxo
Para controlar a taxa em que o cliente assinante recebe mensagens, use os recursos de controle de fluxo do assinante. Esses recursos de controle de fluxo são ilustrados nas amostras a seguir:
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para C++.
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para C#.
Go
O exemplo a seguir usa a versão principal da biblioteca de cliente do Pub/Sub para Go (v2). Se você ainda estiver usando a biblioteca v1, consulte o guia de migração para a v2. Para conferir uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Java (em inglês).
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Node.js (em inglês).
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Node.js (em inglês).
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Python do Pub/Sub.
Ruby
O exemplo a seguir usa a biblioteca de cliente do Ruby Pub/Sub v3. Se você ainda estiver usando a biblioteca v2, consulte o guia de migração para a v3. Para conferir uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de testar esta amostra, siga as instruções de configuração do Ruby no Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Rust
Antes de testar esta amostra, siga as instruções de configuração do Rust em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Rust.
A seguir
Leia sobre as outras opções de entrega que você pode configurar para uma assinatura:
Processar falhas de mensagens com a política de novas tentativas de assinatura
Encaminhar mensagens não entregues para um tópico de mensagens inativas
Reproduzir mensagens confirmadas anteriormente ou limpar mensagens
Aumentar o tempo de confirmação com o gerenciamento de concessões