Todos los productos
Search
Centro de documentos

ApsaraMQ for RocketMQ:Balanceo de carga de consumidores

Última actualización: Sep 04, 2026

Cuando varios consumidores de un grupo extraen mensajes de un tema, ApsaraMQ for RocketMQ distribuye esos mensajes entre los consumidores mediante una política de balanceo de carga. Esto mejora el rendimiento y simplifica el escalado horizontal.

Elegir una política de balanceo de carga

ApsaraMQ for RocketMQ ofrece dos políticas de balanceo de carga. La política aplicable depende del tipo de consumidor y de la versión del broker.

Política

Predeterminada para

Granularidad

Recomendada para

Basada en mensajes

Push Consumer, Simple Consumer (broker 5.x)

Mensajes individuales

Cargas de trabajo orientadas a eventos where cada mensaje se procesa de forma independiente

Basada en colas

Pull Consumer (broker 3.x/4.x/5.x)

Colas completas

Cargas de trabajo de procesamiento de flujos y agregación por lotes

Tip: Si sus consumidores procesan los mensajes uno por uno, el balanceo de carga basado en mensajes proporciona una distribución más uniforme y operaciones más sencillas. Si sus consumidores agregan o procesan por lotes mensajes de una sola fuente, utilice el balanceo de carga basado en colas.

Contexto

Comprender estas políticas le ayuda a planificar:

  • Recuperación ante desastres: cómo se reintentan los mensajes y cómo funciona la conmutación por error cuando fallan los nodos locales.

  • Orden de los mensajes: cómo ApsaraMQ for RocketMQ mantiene un orden estricto FIFO (primero en entrar, primero en salir) dentro de un grupo de mensajes.

  • Escalado horizontal: cómo planificar la migración de tráfico y el escalado horizontal al agregar o eliminar consumidores.

Consumo por difusión frente a consumo por clúster

ApsaraMQ for RocketMQ admite dos modos de consumo. El balanceo de carga solo se aplica al consumo por clúster.

Modo

Consumidores por grupo

Entrega de mensajes

Caso de uso

Balanceo de carga

Difusión

Uno por grupo

Cada grupo recibe todos los mensajes

Envío from gateway, envío de configuración

No aplica

Clúster

Varios por grupo

Cada mensaje va a un consumidor

Desacoplamiento de microservicios, escalado horizontal

Basado en mensajes o basado en colas

Consumption modes

  • Consumo por difusión (lado izquierdo del diagrama): cada grupo de consumidores tiene un consumidor que recibe todos los mensajes. Los distintos grupos de consumidores reciben de forma independiente el flujo completo de mensajes.

  • Consumo por clúster (lado derecho del diagrama): un grupo de consumidores tiene varios consumidores y los mensajes se distribuyen entre ellos. Solo un consumidor del grupo procesa cada mensaje.

Balanceo de carga basado en mensajes

Funcionamiento

El broker distribuye mensajes individuales de un tema de manera uniforme entre todos los consumidores de un grupo, sin importar a qué cola pertenezcan. Varios consumidores pueden procesar mensajes de la misma cola simultáneamente.

Message-based load balancing

En este ejemplo, el Grupo de Consumidores A tiene tres consumidores: A1, A2 y A3. Los tres consumen mensajes de Queue1. El broker asigna cada mensaje a un consumidor a la vez.

Cuando un consumidor recibe un mensaje, el broker bloquea ese mensaje para que sea invisible a otros consumidores. El mensaje permanece bloqueado hasta que el consumidor lo confirma o hasta que expire el tiempo de espera del bloqueo. Esto evita el procesamiento duplicado en condiciones normales.

Importante

Los mensajes se distribuyen bajo demanda en lugar de preasignarse. No es posible controlar qué consumidor específico recibe un mensaje determinado.

Manejo de mensajes ordenados

Para los mensajes ordenados, ApsaraMQ for RocketMQ garantiza que los mensajes dentro del mismo grupo se procesen en el orden exacto en que se almacenaron en el broker.

Ordered message handling

Considere cuatro mensajes ordenados (M1 a M4) en el grupo de mensajes G1 de Queue1. Si el consumidor A1 está procesando M1 y M2, el consumidor A2 no puede comenzar a procesar M3 o M4 hasta que A1 haya enviado el estado de consumo de M1 y M2. El broker aplica un bloqueo secuencial estricto para mantener el orden.

Ventajas sobre el balanceo de carga basado en colas

Ventaja

Funcionamiento

Importancia

Distribución uniforme

Los mensajes se asignan bajo demanda, por lo que todos los consumidores permanecen activos.

Con el balanceo basado en colas, la falta de coincidencia entre la cantidad de colas y de consumidores puede dejar a algunos consumidores inactivos.

Tolerancia a capacidades desiguales

Los consumidores más lentos reciben menos mensajes automáticamente.

Con el balanceo basado en colas, las diferencias en las condiciones de red o en las especificaciones de hardware pueden provocar que un consumidor lento asignado a una cola muy activa acumule retrasos mientras otros consumidores permanecen inactivos.

Planificación de capacidad más sencilla

No es necesario igualar la cantidad de colas con la cantidad de consumidores.

Agregue o elimine consumidores libremente sin ajustar la cantidad de colas.

Cuándo utilizarlo

El balanceo de carga basado en mensajes es adecuado para la mayoría de las cargas de trabajo de procesamiento de eventos en línea where cada mensaje se maneja de forma independiente; por ejemplo, procesamiento de pedidos, envío de notificaciones y manejo de eventos en tiempo real.

Para cargas de trabajo de procesamiento de flujos o agregación que requieren procesar por lotes mensajes de la misma cola, utilice el balanceo de carga basado en colas.

Alcance

El balanceo de carga basado en mensajes es la única política disponible para los tipos Push Consumer y Simple Consumer en la versión 5.x del broker. Está habilitado de forma predeterminada y no requiere configuración adicional.

Ejemplo

Los tipos Push Consumer y Simple Consumer utilizan el balanceo de carga basado en mensajes automáticamente. Los siguientes ejemplos en Java muestran ambos tipos de consumidores procesando mensajes sin ninguna configuración de balanceo de carga.

Push Consumer con un listener de mensajes:

// Push Consumer: implement a message listener to process messages.
// Load balancing is handled automatically by the broker.
MessageListener messageListener = new MessageListener() {
    @Override
    public ConsumeResult consume(MessageView messageView) {
        System.out.println(messageView);
        // Return the consumption result.
        return ConsumeResult.SUCCESS;
    }
};

Simple Consumer con confirmación manual:

// Simple Consumer: pull messages, process them, and acknowledge each one.
// Load balancing is handled automatically by the broker.
try {
    List<MessageView> messageViewList = simpleConsumer.receive(10, Duration.ofSeconds(30));
    messageViewList.forEach(messageView -> {
        System.out.println(messageView);
        try {
            // Acknowledge the message after processing.
            simpleConsumer.ack(messageView);
        } catch (ClientException e) {
            e.printStackTrace();
        }
    });
} catch (ClientException e) {
    // If the pull fails due to throttling or other issues, retry the request.
    e.printStackTrace();
}

Balanceo de carga basado en colas

Funcionamiento

El broker asigna cada cola de un tema a exactamente un consumidor del grupo. Luego, cada consumidor procesa todos los mensajes de sus colas asignadas.

Queue-based load balancing

En este ejemplo, un tema tiene tres colas (Queue1, Queue2, Queue3) y el grupo de consumidores tiene dos consumidores. Dado que cada cola se asigna a un consumidor, el consumidor A2 obtiene dos colas mientras que A1 obtiene una. Si hay menos colas que consumidores, algunos consumidores no reciben colas y permanecen inactivos.

Cada consumidor sigue esta secuencia de procesamiento: extraer mensajes de la cola asignada, enviar el desplazamiento de consumo y persistir el desplazamiento. Como el estado de consumo no se devuelve a la cola cuando un consumidor extrae mensajes, cada cola debe asignarse exclusivamente a un solo consumidor para evitar el procesamiento duplicado.

Importante

El balanceo de carga basado en colas está diseñado para que cada cola sea procesada por un consumidor. Sin embargo, la implementación depende del mecanismo de negociación de información entre el consumidor y el broker. ApsaraMQ for RocketMQ no garantiza que los mensajes de una cola sean procesados por un solo consumidor. Cuando cambian las cantidades de consumidores o de colas, pueden ocurrir inconsistencias temporales en la asignación de colas, y una pequeña cantidad de mensajes podría procesarse más de una vez. Implemente siempre un manejo idempotente de mensajes.

Ventajas sobre el balanceo de carga basado en mensajes

Ventaja

Funcionamiento

Importancia

Afinidad de cola

Todos los mensajes de una cola van al mismo consumidor.

Permite la agregación local y el procesamiento por lotes dentro de un solo consumidor.

Compatibilidad con procesamiento de flujos

Los consumidores mantienen un procesamiento con estado sobre un flujo continuo de la misma cola.

Admite cálculos por ventanas de tiempo y agregaciones continuas.

Cuándo utilizarlo

El balanceo de carga basado en colas es ideal para aplicaciones de computación de flujos y agregación de datos que necesitan procesar por lotes o agregar mensajes de la misma fuente. Por ejemplo, un consumidor podría recopilar métricas de una sola cola durante una ventana de tiempo y calcular promedios continuos.

Alcance

El balanceo de carga basado en colas es la única política disponible para consumidores en las versiones 3.x y 4.x del broker, incluidos los tipos Pull Consumer, Push Consumer predeterminado, Pull Consumer predeterminado y Lite Pull Consumer. En la versión 5.x del broker, los tipos Pull Consumer continúan utilizando el balanceo de carga basado en colas de forma predeterminada.

No se requiere configuración adicional; el balanceo de carga basado en colas se habilita automáticamente para estos tipos de consumidores.

Ejemplo

Para ver código de ejemplo, consulte LitePullConsumerAssign.java en la biblioteca de código de Apache RocketMQ.

Compatibilidad de versiones

Versión del broker

Políticas disponibles

Notas

3.x, 4.x

Solo basada en colas

Todos los tipos de consumidores utilizan el balanceo de carga basado en colas.

5.x

Tanto basada en mensajes como basada en colas

Push Consumer y Simple Consumer utilizan la basada en mensajes de forma predeterminada. Pull Consumer utiliza la basada en colas de forma predeterminada.

La política de balanceo de carga basada en mensajes se introdujo en la versión 5.0 del broker. Si ejecuta la versión 5.x del broker, la política activa depende de la versión del cliente y del tipo de consumidor.

Notas de uso

Implementar manejo idempotente de mensajes

Ambas políticas de balanceo de carga desencadenan un rebalanceo temporal cuando se agregan o eliminan consumidores, o cuando el broker escala. Durante el rebalanceo, una pequeña cantidad de mensajes podría entregarse más de una vez. Para manejar esto, implemente deduplicación para garantizar la idempotencia en su lógica de consumo de mensajes.