ApsaraMQ for RocketMQ utilise des politiques d'équilibrage de charge pour contrôler le routage des messages des producteurs vers les files d'attente, ainsi que l'attribution des messages ou des files d'attente aux consommateurs par les brokers. La politique côté consommateur dépend de la version de votre SDK client TCP.
Fonctionnement
ApsaraMQ for RocketMQ prend en charge deux modèles d'équilibrage de charge pour les consommateurs :
| Modèle | Comportement du consommateur | Compatible avec | Caractéristique principale |
|---|---|---|---|
| Basé sur les messages | Les brokers distribuent les messages individuels aux consommateurs. Plusieurs consommateurs peuvent traiter les messages provenant de la même file d'attente. | SDK client TCP pour Java V2.x.x.Final, SDK client TCP pour C++ V3.x.x | Aucun consommateur inactif lorsque le nombre de consommateurs dépasse le nombre de files d'attente |
| Basé sur les files d'attente | Les brokers attribuent des files d'attente entières aux consommateurs. Chaque file d'attente est traitée par un seul consommateur. | SDK client TCP pour Java V1.x.x.Final, SDK client TCP pour C++ V1.x.x et V2.x.x | Le nombre de consommateurs ne doit pas dépasser le nombre de files d'attente pour éviter les consommateurs inactifs |
L'équilibrage de charge des producteurs fonctionne de la même manière dans les deux modèles :
Messages non ordonnés (messages normaux, transactionnels, planifiés et différés) : les producteurs envoient les messages aux files d'attente selon un ordre circulaire (round-robin).
Messages ordonnés : les producteurs envoient tous les messages partageant la même clé de partitionnement vers la même file d'attente.
Politiques d'équilibrage de charge compatibles avec le SDK pour Java V2.x.x.Final et le SDK pour C++ V3.x.x
Ces politiques d'équilibrage de charge distribuent des messages individuels, et non des files d'attente entières, aux consommateurs. Plusieurs consommateurs peuvent traiter simultanément les messages issus de la même file d'attente ; aucun consommateur ne reste inactif, même si leur nombre excède celui des files d'attente.
Prérequis
Pour utiliser ces politiques d'équilibrage de charge, mettez à niveau votre SDK client TCP :
SDK client TCP pour Java : mettez à niveau vers la V2.x.x.Final. L'instance doit être déployée dans l'une des régions suivantes : Chine (Hangzhou), Chine (Qingdao), Chine (Pékin), Chine (Zhangjiakou), Chine (Hohhot), Chine (Shenzhen), Chine (Chengdu), Allemagne (Francfort) ou Indonésie (Jakarta).
SDK client TCP pour C++ : mettez à niveau vers la V3.x.x. L'instance peut être déployée dans n'importe quelle région.
Routage des producteurs
L'équilibrage de charge des producteurs reste identique, quelle que soit la version du SDK :
-
Messages non ordonnés (messages normaux, transactionnels, planifiés et différés) : les producteurs envoient les messages aux files d'attente selon un ordre circulaire. Dans cet exemple, trois files d'attente sont disponibles. Le producteur envoie Msg1 vers Queue 1, Msg2 vers Queue 2, Msg3 vers Queue 3, puis Msg4 de nouveau vers Queue 1, et ainsi de suite.

-
Messages ordonnés : les producteurs envoient tous les messages partageant la même clé de partitionnement vers la même file d'attente. Dans cet exemple, tous les messages dont la clé de partitionnement est 1 vont vers Queue 1, et ceux dont la clé est 2 vont vers Queue 2.

Attribution des consommateurs pour les messages non ordonnés
Pour les messages non ordonnés, les brokers répartissent équitablement tous les messages d'un topic entre les consommateurs appartenant au même groupe. Différents consommateurs peuvent consommer simultanément les messages issus d'une même file d'attente.

Dans cet exemple, les quatre messages présents dans Queue 2 sont distribués respectivement à Consumer 1, Consumer 2, Consumer 3 et Consumer 4. Chaque consommateur traite les messages de manière indépendante, quelle que soit la file d'attente à laquelle ils appartiennent.
Attribution des consommateurs pour les messages ordonnés
Pour les messages ordonnés, les brokers distribuent les messages en fonction des clés de partitionnement. Tous les messages partageant la même clé de partitionnement sont acheminés vers le même consommateur, ce qui préserve l'ordre de production. Les messages ayant des clés de partitionnement différentes peuvent être distribués à différents consommateurs.

: les messages affichés avec cette couleur d'arrière-plan appartiennent à Queue 1. Par exemple, Msg2-1 correspond au deuxième message de Queue 1, et sa clé de partitionnement est 1.
: les messages affichés avec cette couleur d'arrière-plan appartiennent à Queue 2. Par exemple, Msg3-2 correspond au troisième message de Queue 2, et sa clé de partitionnement est 2.
Dans cet exemple :
Msg1-1, Msg2-1 et Msg3-1 sont tous acheminés vers Consumer 1, car ils partagent la clé de partitionnement 1.
Les messages dont la clé de partitionnement est 2 sont tous envoyés à Consumer 2.
Msg4-3 et Msg4-4 aboutissent à des consommateurs différents, car leurs clés de partitionnement diffèrent.


