A veces, las Data pipelines experimentan aumentos repentinos en el tráfico publicado. Los picos de tráfico pueden abrumar a los suscriptores, a menos que te prepares para ello. 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 funcionar de inmediato. Por ejemplo, es posible que necesites muchas VMs.
El control de flujo del lado del suscriptor permite que este regule la velocidad a la que se transfieren los mensajes. Por lo tanto, el control de flujo maneja los picos de tráfico sin aumentar los costos ni 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 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 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 extraerá más mensajes. Este comportamiento continúa hasta que se confirman o rechazan 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 de Go (v2). Si aún usas la biblioteca de la versión 1, consulta la guía de migración a la versión 2. Para ver una lista de muestras de código de la versión 1, consulta las muestras de código obsoletas.
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
En el siguiente ejemplo, se usa la versión 3 de la biblioteca cliente de Pub/Sub de Ruby. Si aún usas la biblioteca de la versión 2, consulta la guía de migración a la versión 3. Para ver una lista de muestras de código de Ruby v2, consulta las muestras de código obsoletas.
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 más 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 confirmados como recibidos o bórralos definitivamente
Extiende el tiempo de ACK con la administración de arrendamientos