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 ello. Una solución sencilla para evitar los aumentos de tráfico es aumentar de forma dinámica los recursos de suscriptores de Pub/Sub a fin de procesar más mensajes. Sin embargo, esta solución puede aumentar los costos o no funcionar de forma instantánea. Por ejemplo, es posible que necesites muchas VMs.
El control de flujo del lado del suscriptor permite que el suscriptor regule la velocidad a la que se transfieren los mensajes. Así, el control de flujo maneja los aumentos de tráfico sin aumentar los costos ni hasta que el suscriptor escale verticalmente.
El control de flujo es una característica 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 tener control de flujo indica que los mensajes se publican a una velocidad mayor que la que se consumen. Si esta situación es un estado persistente, en lugar de un aumento repentino 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 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 para 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:
setMaxOutdependentElementCount(). Define la cantidad máxima de mensajes para los que Pub/Sub no recibió confirmaciones ni confirmaciones negativas.
setMaxOutdependentRequestBytes(). 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 los mensajes que ya se extraen se confirman o reconocen de forma negativa.
Así, podemos alinear la capacidad de procesamiento con el costo asociado con ejecutar más suscriptores.
Muestras de código para el control de flujo
Para controlar la velocidad a la que el cliente suscriptor recibe 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.
Rita
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 entrega que puedes configurar para una suscripción:
Maneja las fallas de los mensajes con la política de reintentos de suscripción
Cómo reenviar mensajes no entregados a un tema de mensajes no entregados
Cómo volver a reproducir mensajes confirmados o borrar definitivamente mensajes
Extiende el tiempo de confirmación con la administración de arrendamientos