O ApsaraMQ for RocketMQ usa políticas de balanceamento de carga para controlar como os produtores roteiam mensagens para as filas e como os brokers atribuem mensagens ou filas aos consumidores. A política do lado do consumidor depende da versão do SDK cliente TCP.
Como funciona
O ApsaraMQ for RocketMQ oferece dois modelos de balanceamento de carga para consumidores:
|
Modelo |
Comportamento do consumidor |
Compatível com |
Característica principal |
|
Baseado em mensagens |
Os brokers distribuem mensagens individuais aos consumidores. Vários consumidores podem processar mensagens da mesma fila. |
TCP client SDK for Java V2.x.x.Final, TCP client SDK for C++ V3.x.x |
Nenhum consumidor fica ocioso quando o número de consumidores excede o de filas |
|
Baseado em filas |
Os brokers atribuem filas inteiras aos consumidores. Cada fila é processada por exatamente um consumidor. |
TCP client SDK for Java V1.x.x.Final, TCP client SDK for C++ V1.x.x e V2.x.x |
O número de consumidores não deve exceder o de filas para evitar ociosidade |
O balanceamento de carga do produtor funciona da mesma maneira em ambos os modelos:
Mensagens não ordenadas (normais, transacionais, agendadas e atrasadas): os produtores enviam mensagens para as filas em ordem round-robin.
Mensagens ordenadas: os produtores enviam todas as mensagens com a mesma chave de sharding para a mesma fila.
Políticas de balanceamento de carga compatíveis com o SDK for Java V2.x.x.Final e o SDK for C++ V3.x.x
Essas políticas distribuem mensagens individuais — e não filas inteiras — aos consumidores. Vários consumidores podem processar mensagens da mesma fila simultaneamente. Além disso, nenhum consumidor permanece ocioso, mesmo quando o número de consumidores excede o de filas.
Pré-requisitos
Para usar essas políticas de balanceamento de carga, atualize o SDK cliente TCP:
TCP client SDK for Java: atualize para a versão V2.x.x.Final. A instância deve estar implantada em uma destas regiões: China (Hangzhou), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Hohhot), China (Shenzhen), China (Chengdu), Alemanha (Frankfurt) ou Indonésia (Jakarta).
TCP client SDK for C++: atualize para a versão V3.x.x. A instância pode ser implantada em qualquer região.
Roteamento do produtor
O balanceamento de carga do produtor é o mesmo, independentemente da versão do SDK:
-
Mensagens não ordenadas (normais, transacionais, agendadas e atrasadas): os produtores enviam mensagens para as filas em ordem round-robin. Neste exemplo, há três filas disponíveis. O produtor envia Msg1 para a Fila 1, Msg2 para a Fila 2, Msg3 para a Fila 3, Msg4 novamente para a Fila 1 e assim por diante.

-
Mensagens ordenadas: os produtores enviam todas as mensagens com a mesma chave de sharding para a mesma fila. Neste exemplo, todas as mensagens com chave de sharding 1 vão para a Fila 1, e todas as mensagens com chave de sharding 2 vão para a Fila 2.

Atribuição de consumidor para mensagens não ordenadas
Para mensagens não ordenadas, os brokers distribuem uniformemente todas as mensagens de um tópico entre os consumidores do mesmo grupo. Diferentes consumidores podem consumir mensagens da mesma fila simultaneamente.

Neste exemplo, quatro mensagens na Fila 2 são distribuídas ao Consumidor 1, Consumidor 2, Consumidor 3 e Consumidor 4, respectivamente. Cada consumidor processa mensagens de forma independente, sem depender da fila à qual elas pertencem.
Atribuição de consumidor para mensagens ordenadas
Para mensagens ordenadas, os brokers distribuem as mensagens com base nas chaves de sharding. Todas as mensagens com a mesma chave de sharding vão para o mesmo consumidor, o que preserva a ordem de produção. Mensagens com chaves de sharding diferentes podem ser distribuídas a consumidores distintos.

: mensagens com esta cor de fundo pertencem à Fila 1. Por exemplo, Msg2-1 é a segunda mensagem na Fila 1 e sua chave de sharding é 1.
: mensagens com esta cor de fundo pertencem à Fila 2. Por exemplo, Msg3-2 é a terceira mensagem na Fila 2 e sua chave de sharding é 2.
Neste exemplo:
Msg1-1, Msg2-1 e Msg3-1 vão para o Consumidor 1 porque compartilham a chave de sharding 1.
Todas as mensagens com chave de sharding 2 vão para o Consumidor 2.
Msg4-3 e Msg4-4 vão para consumidores diferentes porque possuem chaves de sharding distintas.


