Una cola en ApsaraMQ for RocketMQ es un registro ordenado y de solo anexión que almacena y entrega mensajes. Constituye la unidad mínima de almacenamiento de mensajes. Los productores agregan los nuevos mensajes al final de la cola. Los consumidores leen desde cualquier posición mediante un desplazamiento (offset), que es un entero secuencial que indexa la posición de cada mensaje en el registro. El consumidor controla este desplazamiento y puede leer hacia adelante, saltar a la posición más reciente o restablecer un desplazamiento anterior para reprocesar el historial.
Cada topic (y lightweight topic) consta de una o más colas. Las colas proporcionan dos capacidades fundamentales:
Almacenamiento ordenado: los mensajes dentro de una cola conservan su orden de escritura. El mensaje más antiguo se encuentra al inicio y el más reciente al final. Los consumidores usan el desplazamiento para rastrear su posición de lectura.
Semántica de streaming: dado que el modelo de almacenamiento se basa en colas, los consumidores pueden leer cualquier rango de mensajes a partir de cualquier desplazamiento. Esto permite lecturas agregadas (consumo por lotes en un rango) y lecturas retrospectivas (reprocesamiento de mensajes anteriores). Los brokers tradicionales como RabbitMQ y ActiveMQ no admiten estas operaciones porque carecen de un modelo de almacenamiento basado en colas.
Relación entre colas y topics
El diagrama a continuación muestra cómo se integran las colas en el modelo de dominio de ApsaraMQ for RocketMQ:

Un topic es una agrupación lógica de mensajes. Las colas son los componentes físicos de almacenamiento dentro de un topic donde se persisten y leen los mensajes. Aunque todos los recursos de mensajes se gestionan en el nivel de topic y lightweight topic, las operaciones reales se ejecutan sobre las colas. Por ejemplo, cuando un productor envía un mensaje a un topic, el broker lo entrega a una de las colas del topic.
Todos los mensajes enviados correctamente se almacenan de forma duradera. En combinación con los acuses de recibo de los clientes productores y consumidores, esto proporciona una semántica de entrega de al menos una vez.
Las colas en ApsaraMQ for RocketMQ cumplen la misma función que las particiones en Apache Kafka. Si está familiarizado con las particiones de Kafka, el modelo de colas funciona de la misma manera.
Escalado horizontal
ApsaraMQ for RocketMQ escala horizontalmente mediante el ajuste del número de colas en un topic:
Escalado horizontal (scale out): agregue colas para distribuir la carga entre más nodos de servicio.
Reducción horizontal (scale in): elimine colas para consolidar recursos.
Permisos de lectura y escritura
Restricciones en el número de colas
La cantidad de colas para cada topic o lightweight topic depende de los factores a continuación:
El tipo de mensaje
La región where reside la instancia
El sistema gestiona automáticamente el número de colas y este no se puede modificar.
Compatibilidad de versiones
La nomenclatura de las colas varía según la versión del servicio:
|
Versión |
Formato de nombre de cola |
Relación con los nodos |
|
3.x y 4.x |
Tripleta: |
Vinculada a un nodo físico |
|
5.x |
Cadena globalmente única asignada por el clúster |
Desacoplada de los nodos físicos |
Nunca codifique de forma rígida ni asuma un formato específico de nombre de cola en su aplicación. Los nombres de cola construidos manualmente fallarán tras una actualización de versión debido a los cambios en el esquema de nomenclatura.
Mejores prácticas para el dimensionamiento de colas
Mantenga un número bajo de colas
Use solo la cantidad de colas que requiera su carga de trabajo. El exceso de colas provoca dos problemas:
Inflación de metadatos: las métricas se recopilan en el nivel de cola. Un mayor número de colas implica más metadatos del plano de control por gestionar.
Desperdicio de recursos del cliente: las operaciones de lectura y escritura se ejecutan por cola. Las colas inactivas generan solicitudes de sondeo vacías que consumen recursos tanto del cliente como del servidor.
Cuándo agregar colas
Balanceo de carga de nodos físicos: después de agregar nodos a un clúster, cree colas en los nuevos nodos o migre las colas existentes para distribuir el tráfico de manera uniforme.
Throughput de mensajes ordenados (v4.x): en la versión 4.x del servicio, el orden de los mensajes se garantiza únicamente dentro de una sola cola, por lo que la cantidad de colas limita directamente la concurrencia de mensajes ordenados. Agregue colas solo cuando enfrente un cuello de botella en el rendimiento.
Mensajes no ordenados en v5.x (sin acción requerida): la versión 5.x del servicio admite balanceo de carga en el nivel de mensaje para los consumidores. Los mensajes dentro de la misma cola se distribuyen equitativamente entre todos los consumidores, de modo que la cantidad de colas no afecta la concurrencia de consumo. Para obtener más detalles, consulte Consumer load balancing.