Data pipelines a veces tienen aumentos repentinos en el tráfico publicado. Los aumentos repentinos de tráfico pueden abrumar a los suscriptores, a menos que estés preparado para ellos. Una solución simple para evitar los picos de tráfico es aumentar de forma dinámica los recursos de los suscriptores de Pub/Sub para procesar más mensajes. Sin embargo, esta solución podría aumentar los costos o no trabajar de forma instantánea. Por ejemplo, es posible que necesites muchas VMs.
El control de flujo del suscriptor le permite regular la velocidad a la que se transfieren los mensajes. Por lo tanto, el control de flujo controla los picos de tráfico sin aumentar los costos o hasta que se aumente la escala del suscriptor.
El control de flujo es una función disponible en la biblioteca cliente de alto nivel de Pub/Sub. También puedes implementar tu propia programación de control de flujo cuando usas una biblioteca cliente de bajo nivel.
La necesidad de control de flujo indica que los mensajes se publican a una frecuencia mayor de la que se consumen. Si se trata de un estado persistente, en lugar de un pico transitorio del volumen de mensajes, considera aumentar la cantidad de instancias de cliente suscriptor.
Configuración del control de flujo
El control de flujo te permite configurar la cantidad máxima de bytes asignados para las solicitudes pendientes y la cantidad máxima de mensajes pendientes permitidos. Establece estos límites según la capacidad de procesamiento de las máquinas de cliente.
Los valores predeterminados de las variables de control de flujo y los nombres de las variables pueden diferir entre las bibliotecas cliente. Por ejemplo, en la biblioteca cliente de Java, las siguientes variables configuran el control de flujo:
setMaxOutstandingElementCount(). Define la cantidad máxima de mensajes para los que Pub/Sub no recibió confirmaciones ni confirmaciones negativas.
setMaxOutstandingRequestBytes(). Define el tamaño máximo de los mensajes para los que Pub/Sub no recibió confirmaciones ni confirmaciones negativas.
Si se supera el límite de setMaxOutstandingElementCount()
o setMaxOutstandingRequestBytes()
, el cliente suscriptor no extrae más mensajes. Este comportamiento continúa hasta que se confirman o rechazan los mensajes que ya se extrajeron.
Por lo tanto, podemos alinear la capacidad de procesamiento con el costo asociado con la ejecución de más suscriptores.
Muestras de código para el control de flujo
Para controlar la velocidad a la que el cliente suscriptor recibe los mensajes, usa las funciones de control de flujo del suscriptor. Estas funciones de control de flujo se ilustran en los siguientes ejemplos:
C++
Antes de probar esta muestra, sigue las instrucciones de configuración de C++ en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C++.
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
¿Qué sigue?
Obtén información sobre las otras opciones de publicación que puedes configurar para una suscripción:
Controla las fallas de mensajes con la política de reintentos de suscripción
Cómo reenviar mensajes que no se pudieron entregar a un tema de mensajes no entregados
Vuelve a reproducir mensajes confirmados o borra definitivamente mensajes
Extiende el tiempo de acuse de recibo con la administración de arrendamientos