Data pipelines a veces tienen picos en el tráfico publicado. Los picos de tráfico pueden abrumar a los suscriptores, a menos que estés preparado para ello. Una solución simple para evitar los picos de tráfico es aumentar de forma dinámica los recursos del suscriptor de Pub/Sub para procesar más mensajes. Sin embargo, esta solución podría aumentar los costos o no funcionar de forma instantánea. Por ejemplo, es posible que necesites muchas VMs.
El control de flujo en el lado del suscriptor permite que el suscriptor regule la velocidad a la que se incorporan los mensajes. Por lo tanto, el control de flujo controla los picos de tráfico sin aumentar los costos o hasta que se escale el 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 esta situación es 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 para las variables de control de flujo y los nombres de las variables pueden diferir en 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 extraerá más mensajes. Este comportamiento continúa hasta que se confirmen o se confirmen de forma negativa los mensajes que ya se extrajeron.
Por lo tanto, podemos alinear el rendimiento con el costo asociado a 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 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
En el siguiente ejemplo, se usa la versión principal de la biblioteca cliente de Pub/Sub para Go (v2). Si aún usas la biblioteca v1, consulta la guía de migración a la v2. Para ver una lista de ejemplos de código de la v1, consulta los ejemplos de código obsoletos.
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 Python de Pub/Sub .
Ruby
En el siguiente ejemplo, se usa la biblioteca cliente de Pub/Sub para Ruby v3. Si aún usas la biblioteca v2, consulta la guía de migración a la v3. Para ver una lista de ejemplos de código de la v2 de Ruby, consulta los ejemplos de código obsoletos.
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:
Controla los errores en los mensajes con la política de reintento de suscripción.
Reenvía los mensajes no entregados a un tema de mensajes no entregados.
Vuelve a reproducir mensajes ya confirmados o borra mensajes.
Extiende el tiempo de confirmación con la administración de arrendamientos.