A veces, las Data pipelines experimentan aumentos repentinos en el tráfico publicado. Los picos de tráfico pueden sobrecargar a los suscriptores, a menos que te prepares para ello. Una solución simple para evitar los aumentos repentinos 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 le permite regular la velocidad a la que se incorporan los mensajes. Por lo tanto, el control de flujo maneja los picos de tráfico sin aumentar los costos o hasta que se amplíe la cantidad de suscriptores.
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.
Punto clave: Si recibes aumentos repentinos de tráfico para los mensajes publicados, usa el control de flujo en tu cliente suscriptor de extracción para abordar los aumentos transitorios.
La necesidad de control de flujo indica que los mensajes se publican a una velocidad mayor de la que se consumen. Si esta situación es un estado persistente, en lugar de un aumento transitorio en el 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 se rechazan los mensajes que ya se extrajeron.
Por lo tanto, podemos alinear la capacidad de procesamiento 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 la siguiente muestra, 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 este ejemplo, sigue las instrucciones de configuración para Go que se encuentran en la guía de inicio rápido sobre cómo usar 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 deseas 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 biblioteca cliente de Pub/Sub de Ruby v3. 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 este ejemplo, sigue las instrucciones de configuración para Ruby que se encuentran en la Guía de inicio rápido: 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.
Rust
Antes de probar este ejemplo, sigue las instrucciones de configuración de Rust en Guía de inicio rápido: Uso de bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Pub/Sub en Rust.
¿Qué sigue?
Obtén información sobre las otras opciones de entrega que puedes configurar para una suscripción:
Cómo controlar las fallas de mensajes con la política de reintentos de suscripción
Reenvía mensajes no entregados a un tema de mensajes no entregados
Vuelve a reproducir mensajes confirmados anteriormente o borra mensajes
Extiende el tiempo de confirmación con la administración de arrendamientos