No ApsaraMQ for RocketMQ, uma fila é um log ordenado e apenas para adição que armazena e entrega mensagens. Ela representa a menor unidade de armazenamento de mensagens. Os produtores adicionam novas mensagens ao final da fila. Os consumidores leem a partir de qualquer posição referenciando um offset — um número inteiro sequencial que indexa a posição de cada mensagem no log. O consumidor controla esse offset e pode ler sequencialmente, avançar para a posição mais recente ou redefinir para um offset anterior para reprocessar o histórico.
Cada tópico (e tópico leve) consiste em uma ou mais filas. As filas oferecem duas capacidades principais:
Armazenamento ordenado: as mensagens dentro de uma fila preservam sua ordem de escrita. A mensagem mais antiga fica no início e a mais recente no final. Os consumidores usam o offset para rastrear sua posição de leitura.
Semântica de streaming: como o modelo de armazenamento é baseado em filas, os consumidores podem ler qualquer intervalo de mensagens a partir de qualquer offset. Isso permite leituras agregadas (consumo em lote em um intervalo) e leituras retroativas (reprocessamento de mensagens anteriores). Brokers tradicionais, como RabbitMQ e ActiveMQ, não suportam essas operações porque não possuem um modelo de armazenamento baseado em filas.
Relação entre filas e tópicos
O diagrama a seguir ilustra como as filas se encaixam no modelo de domínio do ApsaraMQ for RocketMQ:

Um tópico é um agrupamento lógico de mensagens. As filas são os componentes físicos de armazenamento dentro de um tópico onde as mensagens são persistidas e lidas. Embora todos os recursos de mensagem sejam gerenciados no nível de tópico e tópico leve, as operações reais ocorrem nas filas. Por exemplo, quando um produtor envia uma mensagem para um tópico, o broker a entrega em uma das filas desse tópico.
Todas as mensagens enviadas com sucesso são armazenadas de forma durável. Combinado com os reconhecimentos dos clientes produtores e consumidores, isso garante a semântica de entrega de pelo menos uma vez.
As filas no ApsaraMQ for RocketMQ desempenham o mesmo papel que as partições no Apache Kafka. Se você já conhece as partições do Kafka, o modelo de filas funciona da mesma maneira.
Dimensionamento horizontal
O ApsaraMQ for RocketMQ dimensiona horizontalmente ajustando o número de filas em um tópico:
Scale-out: adicione filas para distribuir a carga entre mais nós de serviço.
Scale-in: remova filas para consolidar recursos.
Permissões de leitura e escrita
Restrições de quantidade de filas
A quantidade de filas para cada tópico ou tópico leve depende de:
Tipo de mensagem
Região onde a instância está localizada
As quantidades de filas são gerenciadas pelo sistema e não podem ser modificadas.
Compatibilidade de versões
A nomenclatura das filas difere entre as versões do serviço:
|
Versão |
Formato do nome da fila |
Relação com os nós |
|
3.x e 4.x |
Tupla tripla: |
Vinculado a um nó físico |
|
5.x |
String globalmente única atribuída pelo cluster |
Desacoplado dos nós físicos |
Nunca codifique rigidamente (hardcode) nem presuma um formato específico de nome de fila em sua aplicação. Nomes de fila construídos manualmente falharão após uma atualização de versão, pois o esquema de nomenclatura muda.
Melhores práticas para dimensionamento de filas
Mantenha a contagem de filas baixa
Utilize apenas a quantidade de filas necessária para sua carga de trabalho. O excesso de filas causa dois problemas:
Inchaço de metadados: as métricas são coletadas no nível da fila. Mais filas significam mais metadados do plano de controle para gerencie.
Desperdício de recursos do cliente: leituras e escritas ocorrem por fila. Filas ociosas geram solicitações de polling vazias que consomem recursos do cliente e do servidor.
Quando adicionar filas
Balanceamento de carga de nós físicos: após adicionar nós a um cluster, crie filas nos novos nós ou migre as filas existentes para distribuir o tráfego uniformemente.
Throughput de mensagens ordenadas (v4.x): na versão 4.x do serviço, a ordenação das mensagens é garantida apenas dentro de uma única fila. Portanto, a quantidade de filas limita diretamente a concorrência de mensagens ordenadas. Adicione filas somente ao atingir um gargalo de desempenho.
Mensagens não ordenadas na v5.x — nenhuma ação necessária: a versão 5.x do serviço suporta balanceamento de carga do consumidor no nível da mensagem. As mensagens dentro da mesma fila são distribuídas uniformemente entre todos os consumidores, de modo que a quantidade de filas não afeta a concorrência de consumo. Para obter detalhes, consulte Balanceamento de carga do consumidor.