Les pipelines de données enregistrent parfois des pics de trafic publié. Les pics de trafic peuvent submerger les abonnés si vous n'y êtes pas préparé. Une solution simple pour éviter les pics de trafic consiste à augmenter dynamiquement les ressources des abonnés Pub/Sub afin de traiter davantage de messages. Toutefois, cette solution peut entraîner une augmentation des coûts ou ne pas fonctionner instantanément. Par exemple, vous pouvez avoir besoin de nombreuses VM.
Le contrôle de flux côté abonné permet à l'abonné de réguler la fréquence à laquelle les messages sont ingérés. Le contrôle du flux gère donc les pics de trafic sans augmenter les coûts ni jusqu'à ce que l'abonné soit mis à l'échelle.
Le contrôle de flux est une fonctionnalité disponible dans la bibliothèque cliente de haut niveau Pub/Sub. Vous pouvez également implémenter votre propre programmation de contrôle de flux lorsque vous utilisez une bibliothèque cliente de bas niveau.
Point clé : Si vous constatez des pics de trafic soudains pour les messages publiés, utilisez le contrôle de flux dans votre client d'abonné par extraction pour gérer ces pics temporaires.
La nécessité d'un contrôle de flux indique que les messages sont publiés à un rythme plus élevé que celui auquel ils sont consommés. Si ce scénario est un état persistant plutôt qu'un pic temporaire du volume de messages, envisagez d'augmenter le nombre d'instances de client abonné.
Configuration du contrôle de flux
Le contrôle de flux vous permet de configurer le nombre maximal d'octets alloués aux requêtes en attente et le nombre maximal de messages en attente autorisés. Définissez ces limites en fonction de la capacité de débit de vos machines clientes.
Les valeurs par défaut des variables de contrôle de flux et les noms des variables peuvent varier selon les bibliothèques clientes. Par exemple, dans la bibliothèque cliente Java, les variables suivantes configurent le contrôle de flux :
setMaxOutstandingElementCount() : définit le nombre maximal de messages pour lesquels Pub/Sub n'a pas reçu d'accusé de réception ni d'accusé de réception négatif.
setMaxOutstandingRequestBytes() : définit la taille maximale des messages pour lesquels Pub/Sub n'a pas reçu d'accusé de réception ni d'accusé de réception négatif.
Si la limite pour setMaxOutstandingElementCount() ou setMaxOutstandingRequestBytes() est dépassée, le client abonné ne récupère pas d'autres messages. Ce comportement se poursuit jusqu'à ce que les messages déjà extraits soient confirmés ou confirmés négativement.
Nous pouvons ainsi aligner le débit sur le coût associé à l'exécution de plusieurs abonnés.
Exemples de code pour le contrôle de flux
Pour contrôler la fréquence à laquelle le client abonné reçoit des messages, utilisez les fonctionnalités de contrôle de flux de l'abonné. Ces fonctionnalités de contrôle de flux sont illustrées dans les exemples suivants :
C++
Avant d'essayer cet exemple, suivez les instructions de configuration pour C++ dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub C++.
C#
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C# qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub C#.
Go
L'exemple suivant utilise la version majeure de la bibliothèque cliente Go Pub/Sub (v2). Si vous utilisez toujours la bibliothèque v1, consultez le guide de migration vers la v2. Pour obtenir la liste des exemples de code v1, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java se trouvant sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Node.js.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Node.js.
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Python.
Ruby
L'exemple suivant utilise la bibliothèque cliente Ruby Pub/Sub v3. Si vous utilisez toujours la bibliothèque v2, consultez le guide de migration vers la v3. Pour obtenir la liste des exemples de code Ruby v2, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Ruby.
Rust
Avant d'essayer cet exemple, suivez les instructions de configuration pour Rust dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub Rust.
Étapes suivantes
Découvrez les autres options de distribution que vous pouvez configurer pour un abonnement :
Gérer les échecs de messages avec une règle de réessai d'abonnement
Transférer les messages non distribués vers une file d'attente de lettres mortes
Relire les messages pour lesquels un accusé de réception a déjà été envoyé ou supprimer des messages
Prolonger le délai d'accusé de réception avec la gestion des baux
Traiter plus de messages avec le contrôle de la simultanéité