Todos los productos
Search
Centro de documentos

ApsaraMQ for RocketMQ:Gestión del progreso de consumo

Última actualización: Sep 04, 2026

ApsaraMQ for RocketMQ utiliza los offsets de consumidor para gestionar el progreso de los consumidores. Este tema describe el mecanismo de gestión del progreso de consumo de ApsaraMQ for RocketMQ.

Contexto

En ApsaraMQ for RocketMQ, los mensajes pueden generarse antes o después de que los consumidores se suscriban a ellos. ¿Cómo sabe un consumidor dónde comenzar a consumir mensajes y cómo se marcan los mensajes ya consumidos? Para resolver esta problemática, ApsaraMQ for RocketMQ desarrolló el mecanismo de gestión del progreso de consumo.

El mecanismo de gestión del progreso de consumo de ApsaraMQ for RocketMQ resuelve los siguientes problemas:

  • ¿Desde dónde comienza a consumir mensajes un cliente tras iniciarse?

  • ¿Cómo se marca un mensaje consumido para garantizar que no se procese varias veces?

  • ¿Puede el mismo cliente volver a consumir un mensaje si ocurre una excepción en el servicio?

Mecanismo de funcionamiento

Offset

En ApsaraMQ for RocketMQ, los mensajes se almacenan en varias queues de una topic específica, siguiendo el orden de llegada al broker. A cada mensaje se le asigna una coordenada única de tipo Long, conocida como offset del mensaje.

En teoría, una cola de mensajes puede almacenar una cantidad indefinida de mensajes. Por lo tanto, el rango de valores del offset va de 0 a Long.MAX_VALUE. Es posible localizar un mensaje según su topic, cola y offset. La siguiente figura muestra la relación entre estos conceptos.消息位点

En ApsaraMQ for RocketMQ, el offset del primer mensaje en una cola se denomina offset mínimo (MinOffset), y el offset del mensaje más reciente se llama offset máximo (MaxOffset). Aunque teóricamente una cola de mensajes puede contener una cantidad indefinida de mensajes, las máquinas físicas donde se almacenan tienen espacio limitado. Por ello, ApsaraMQ for RocketMQ elimina dinámicamente el mensaje más antiguo de una cola, lo que provoca que los valores de MinOffset y MaxOffset aumenten constantemente.消费位点更新

Offset de consumidor

ApsaraMQ for RocketMQ sigue el patrón de publicación-suscripción. Varios grupos de consumidores pueden suscribirse a la misma cola. En escenarios como este, cuando un consumidor elimina un mensaje tras consumirlo, otros consumidores no pueden acceder a dicho mensaje.

Para evitar esta situación, ApsaraMQ for RocketMQ utiliza offsets de consumidor para gestionar el progreso de consumo de mensajes de los distintos consumidores. ApsaraMQ for RocketMQ no elimina un mensaje inmediatamente después de consumirse. En su lugar, ApsaraMQ for RocketMQ mantiene un registro del último mensaje consumido por un grupo de consumidores, conocido como offset de consumidor.

Si se reinicia un cliente, el consumidor puede continuar procesando mensajes a partir del offset de consumidor guardado en el broker. Si el offset de consumidor caduca y se elimina, se utiliza el valor de MinOffset de la cola almacenado en el broker como offset de consumidor.

Nota

Los offsets de consumidor se guardan y restauran desde los brokers de ApsaraMQ for RocketMQ y no están vinculados a un consumidor específico. Por lo tanto, ApsaraMQ for RocketMQ puede restaurar el progreso de consumo entre diferentes consumidores.

La siguiente figura ilustra la relación entre el offset mínimo, el offset máximo y el offset de consumidor en una cola de mensajes.消费进度

  • El offset de consumidor siempre es menor o igual que el offset máximo.

    • Si los mensajes se producen y consumen a la misma velocidad, y no hay mensajes pendientes en la cola, el offset de consumidor coincide con el offset máximo.

    • Si los mensajes se consumen más lento de lo que se producen, habrá mensajes sin consumir en la cola. En este caso, el offset de consumidor será menor que el offset máximo, y la diferencia corresponde al número de mensajes pendientes.

  • Por lo general, el offset de consumidor es mayor o igual que el offset mínimo. Si el offset de consumidor es menor que el offset mínimo, el consumidor no podrá consumir mensajes. En tal caso, el broker restaurará automáticamente el offset de consumidor correcto.

Offset de consumidor inicial

El offset de consumidor inicial es el offset que se guarda en el broker cuando un grupo de consumidores comienza a consumir una cola de mensajes por primera vez.

ApsaraMQ for RocketMQ utiliza el offset máximo de una cola de mensajes cuando un consumidor obtiene mensajes de dicha cola por primera vez como offset de consumidor inicial. Es decir, el consumidor inicia el consumo desde el mensaje más reciente de la cola.

Restablecer un offset de consumidor

Si el offset de consumidor inicial o actual no se ajusta al estado de su negocio, puede restablecer el offset de consumidor para ajustar el progreso de consumo.

Escenarios

  • Offset de consumidor inicial inadecuado: El offset de consumidor inicial corresponde al offset máximo de la cola, por lo que el cliente comienza a consumir desde el mensaje más reciente. Si necesita consumir mensajes anteriores, puede restablecer el offset de consumidor al de un mensaje previo.

  • Retraso en el consumo: Puede acumularse una gran cantidad de mensajes si el consumidor no logra seguir el ritmo de generación de mensajes. Si los mensajes acumulados no son críticos para el negocio, puede establecer el offset de consumidor en un valor mayor para omitirlos y reducir la carga en los sistemas posteriores.

  • Reprocesamiento y corrección de datos: Si desea volver a consumir mensajes que se procesaron incorrectamente debido a errores de negocio, puede establecer el offset de consumidor en un valor menor.

Función de restablecimiento del offset de consumidor

La función de restablecimiento del offset de consumidor de ApsaraMQ for RocketMQ ofrece las siguientes capacidades:

  • Restablecer el offset de consumidor al offset más reciente

    Los consumidores del grupo especificado omiten todos los mensajes acumulados en el topic indicado y comienzan a consumir desde el offset más reciente.

  • Restablecer el offset de consumidor a un momento específico

    • Los consumidores inician el consumo desde el mensaje correspondiente al momento restablecido, independientemente de si el mensaje ya fue consumido.

    • Puede especificar un momento dentro del rango comprendido entre la hora de envío del primer mensaje al topic y la hora de envío del mensaje más reciente.

    • Si restablece el offset de consumidor a un momento específico, el broker ajustará el offset de consumidor al offset más cercano a dicho momento.

Métodos de configuración

  • Operaciones en la consola:

    1. Inicie sesión en la consola de ApsaraMQ for RocketMQ. En el panel de navegación izquierdo, seleccione Instances.

    2. En la página Instances, seleccione la instancia que desea gestionar. En el panel de navegación izquierdo de la página Instance Details que aparece, haga clic en Groups.

    3. En la página Groups, haga clic en el grupo que desea gestionar. En la página Group Details que aparece, restablezca el offset de consumidor.

  • Operación de API: ResetConsumeOffset

Límites

  • Después de restablecer un offset de consumidor, este comenzará a consumir mensajes desde el nuevo offset. En escenarios de reprocesamiento, el consumidor empieza con mensajes históricos que suelen ser datos fríos. Esto se conoce como lectura en frío y puede generar una carga excesiva en su sistema. Evalúe los riesgos y beneficios antes de restablecer un offset de consumidor. Se recomienda implementar directivas de control estrictas para este permiso a fin de evitar abusos y restablecimientos frecuentes.

  • ApsaraMQ for RocketMQ permite restablecer el offset de consumidor únicamente para mensajes visibles. No es posible restablecer el offset de mensajes que se encuentren en estados de programación o pendientes de reintento. Para obtener más información, consulte Scheduled and delayed messages y Consumption retry.

Compatibilidad de versiones

Los brokers tienen definiciones distintas para el offset de consumidor inicial según la versión de ApsaraMQ for RocketMQ:

  • En las versiones 4.x y 3.x, el offset de consumidor inicial se define como el estado del mensaje de una cola.

  • En las versiones 5.x, el offset de consumidor inicial corresponde al offset máximo de la cola en el momento en que el consumidor comienza a recibir mensajes.

Por lo tanto, si actualiza desde una versión anterior, debe prestar atención al offset de consumidor inicial al iniciar su cliente.

Notas de uso

Control estricto de los permisos de restablecimiento

Restablecer el offset de consumidor genera carga adicional en el sistema y puede afectar la lectura y escritura de mensajes. Por ello, se recomienda evaluar los riesgos y beneficios antes de ejecutar esta operación.