Todos os produtos
Search
Central de documentação

ApsaraMQ for RocketMQ:Balanceamento de carga para produtores

Última atualização: Jun 27, 2026

O ApsaraMQ for RocketMQ distribui mensagens entre várias filas para evitar pontos de acesso e gargalos de desempenho. O tipo de mensagem determina qual política de balanceamento de carga se aplica: mensagens não ordenadas usam round robin e mensagens ordenadas usam MessageGroupHash.

Compreender essas políticas ajuda você a:

  • Planejar a recuperação de desastres: Saiba como as mensagens são redirecionadas quando um nó falha.

  • Garantir a ordenação de mensagens: Entenda como o ApsaraMQ for RocketMQ mantém a entrega estrita em FIFO para mensagens ordenadas.

  • Dimensionar o throughput: Projete estratégias eficazes de distribuição de tráfego e dimensionamento de filas.

Comparação de políticas

PolíticaTipo de mensagemAlgoritmoGarantia de ordenaçãoSuporte de versão
Round robinNão ordenada (normal, programada, transacional)Distribuição cíclica entre todas as filasNenhuma5.x, 4.x, 3.x
MessageGroupHashOrdenadaHash baseado em SipHash no grupo de mensagensFIFO dentro do mesmo grupo de mensagensSomente 5.x

Round robin

O round robin é a política padrão e exclusiva de balanceamento de carga para mensagens não ordenadas, incluindo mensagens normais, programadas e transacionais.

Como funciona

O produtor percorre todas as filas em um tópico, distribuindo uma mensagem por fila antes de passar para a próxima. Esse processo mantém a carga distribuída uniformemente entre as filas e maximiza o throughput do tópico.

Load balancing policy for producers

Neste diagrama, Queue 1, Queue 2 e Queue 3 são filas do tópico. O produtor envia M1 para Queue 1, M2 para Queue 2 e M3 para Queue 3 e, em seguida, reinicia o ciclo para as próximas mensagens.

Isolamento de falhas

Se o envio de uma mensagem falhar, o ApsaraMQ for RocketMQ avalia a causa da falha e pode ignorar temporariamente o nó afetado ao selecionar a próxima fila de destino. Esse isolamento automático de falhas redireciona as mensagens subsequentes para filas íntegras sem intervenção manual.

Exemplo de código

O round robin está ativado por padrão para mensagens não ordenadas. Nenhuma configuração adicional é necessária.

// Round robin is the default policy for normal messages.
// The SDK automatically distributes messages across all queues.
MessageBuilder messageBuilder = null;
for (int i = 0; i < 10; i++) {
    Message message = messageBuilder.setTopic("normalTopic")
            // Set the message index key for accurate message lookup.
            .setKeys("messageKey")
            // Set the message tag for consumer-side filtering.
            .setTag("messageTag")
            // Set the message body.
            .setBody("messageBody".getBytes())
            .build();
    try {
        SendReceipt sendReceipt = producer.send(message);
        System.out.println(sendReceipt.getMessageId());
    } catch (ClientException e) {
        e.printStackTrace();
    }
}

MessageGroupHash

O MessageGroupHash é a política padrão e exclusiva de balanceamento de carga para mensagens ordenadas. Ele garante a entrega em FIFO (first-in, first-out) dentro de cada grupo de mensagens.

Como funciona

O produtor aplica hash ao identificador de grupo de cada mensagem usando o algoritmo SipHash e mapeia o resultado para uma fila específica. Todas as mensagens do mesmo grupo de mensagens são roteadas para a mesma fila e armazenadas na ordem de envio.

SipHash algorithm-based distribution

Neste diagrama, G1-M1, G1-M2 e G1-M3 pertencem ao MessageGroup 1. O algoritmo SipHash os mapeia para MessageQueue 1, onde são armazenados na ordem de envio.

Risco de distribuição desigual

Como o MessageGroupHash mapeia cada grupo para uma fila fixa, volumes desiguais de mensagens entre grupos podem concentrar a carga em um pequeno número de filas. Se a maioria das mensagens pertence a poucos grupos, essas filas se tornam pontos de acesso, aumentando a pressão de armazenamento e limitando a capacidade de dimensionamento.

Para mitigar esse problema, projete grupos de mensagens em um nível granular. Por exemplo, em um sistema de comércio eletrônico, use IDs de pedido ou IDs de usuário como chaves de grupo de mensagens. Isso distribui as mensagens entre muitos grupos, preservando a ordenação por pedido ou por usuário.

Exemplo de código

O MessageGroupHash está ativado por padrão para mensagens ordenadas. Especifique o grupo de mensagens com setMessageGroup().

// MessageGroupHash is the default policy for ordered messages.
// Messages in the same group go to the same queue, in send order.
for (int i = 0; i < 10; i++) {
    Message message = messageBuilder.setTopic("fifoTopic")
            // Set the message index key for accurate message lookup.
            .setKeys("messageKey")
            // Set the message tag for consumer-side filtering.
            .setTag("messageTag")
            // Set the message group. Messages with the same group
            // are routed to the same queue via the SipHash algorithm.
            .setMessageGroup("fifoGroupA")
            // Set the message body.
            .setBody("messageBody".getBytes())
            .build();
    try {
        SendReceipt sendReceipt = producer.send(message);
        System.out.println(sendReceipt.getMessageId());
    } catch (ClientException e) {
        e.printStackTrace();
    }
}

Compatibilidade de versões

Política5.x4.x3.x
Round robinCompatívelCompatívelCompatível
MessageGroupHashCompatívelNão compatívelNão compatível

Ao atualizar da versão 4.x ou 3.x para 5.x do servidor, o mecanismo de entrega de mensagens ordenadas muda da abordagem legada para o MessageGroupHash. Para evitar a reordenação de mensagens durante a transição, consuma todas as mensagens existentes no tópico antes de mudar para a versão 5.x.

O round robin é compatível com todas as versões de servidor e não requer etapas de migração.

Práticas recomendadas

Distribuir mensagens entre vários grupos

No modo MessageGroupHash, todas as mensagens do mesmo grupo vão para a mesma fila. Se a lógica de negócios concentrar mensagens em poucos grupos, essas filas ficarão sobrecarregadas.

Escolha chaves de grupo granulares que distribuam as mensagens de forma uniforme. Por exemplo:

CenárioChave de grupo recomendadaBenefício
Processamento de pedidosID do pedidoUma fila por pedido; os pedidos são distribuídos entre as filas
Rastreamento de atividade do usuárioID do usuárioOrdenação por usuário com distribuição uniforme entre usuários
Telemetria de dispositivosID do dispositivoOrdenação por dispositivo sem pontos de acesso

Usar mais de uma fila por tópico

Independentemente da política de balanceamento de carga, um tópico com uma única fila não consegue distribuir a carga. Todas as mensagens vão para essa fila, criando um gargalo de desempenho e eliminando a capacidade de recuperação de desastres.

Configure sempre várias filas por tópico para possibilitar a distribuição de carga e o failover.