Texto e documentos
Números e cálculo
Dados e formatos
Segurança
Desenvolvimento e DevOps
Inteligência Artificial
Finanças
Saúde & Bem-estar
Produtividade
Jogos & Entretenimento
Multimédia e design
Empresa
Guia de utilização
Como se usa

Escolhe um cenário predefinido ou escreve o teu em JSON. O mesmo cenário corre no RabbitMQ, no Kafka com um grupo clássico, no Kafka com um share group, no Amazon SQS (com o SNS à frente se houver vários grupos), no NATS JetStream, no Redis Streams e no MQTT, e são comparados: o que é processado uma vez, o que se repete, o que se perde, o que acaba na fila de mensagens mortas. Muda a configuração de cada broker e o resultado sai sozinho.

O que é e o que não é

É um simulador. As suas regras estão portadas do código do RabbitMQ 4.0.5 e 4.3.6 e do Kafka 4.3.1, e calibradas com esses brokers reais: 5000 encaminhamentos aleatórios por versão, cenários de reentrega e de fila de mensagens mortas, 2000 chaves de partição, distribuições de grupos de consumidores Java, o que é libertado num rebalanceamento, onde continua um consumidor depois de uma falha (com commit por lote e com auto-commit) e quantas vezes entrega um share group com REJECT e com RELEASE. Também a distribuição entre consumidores do RabbitMQ e, nos share groups, o que acontece quando um consumidor fica preso (volta quando o bloqueio expira) e quando morre (é libertada no ato). O SQS está calibrado com o ElasticMQ 1.7.1, um EMULADOR, não com a AWS: redrive, visibilidade, ordem FIFO por grupos e receipt handles; o SNS vem da documentação da AWS. O NATS JetStream, com o NATS 2.15.0 real: max_deliver, nak, ack_wait, confirmação tardia, term, distribuição entre clientes, max_ack_pending, deliver_policy, nak com atraso e backoff. Redis Streams, com o Redis 8.0.2 real: lista de pendentes, XAUTOCLAIM, XACK de grupo, releitura, $ e 0, distribuição e corte do stream (MAXLEN); o limite de entregas e a sua fila de mensagens mortas são a receita habitual da aplicação, porque o Redis não os traz. MQTT, com o Mosquitto 2.0.21 real: o que é reenviado e quando, sessões persistentes e limpas, a janela de 20 sem confirmar, subscrições partilhadas, QoS 0, 1 e 2 e mensagens retidas. Não mede tempos nem desempenho: o tempo é lógico, em ticks (1 tick = 1 s para os valores por defeito do Kafka).

O cenário

mensagens (id, t e opcionalmente clave, ttl, veneno), consumidores (id, grupo, prefetch, coste, ackRetraso, entra, probFallo) e falhas (t, consumidor, tipo muere ou vuelve). No RabbitMQ cada grupo é uma fila; no Kafka, um grupo de consumidores. Uma mensagem com veneno falha sempre ao ser processada.

Brokers de mensagensRabbitMQ e Kafka, o mesmo cenário
Brokers de mensagensRabbitMQ e Kafka, o mesmo cenário

Simulado. Calibrado com RabbitMQ 4.0.5 e 4.3.6 e Kafka 4.3.1 reais em: encaminhamento, reentregas, fila de mensagens mortas, distribuição entre consumidores, partição por chave, distribuição e rebalanceamento do grupo, onde continua quem entra depois de uma falha, e entregas, bloqueios e quedas dos share groups. O SQS, com um emulador (ElasticMQ 1.7.1), não com a AWS; o SNS, segundo a documentação; o NATS JetStream, o Redis Streams e o MQTT, com o NATS 2.15.0, o Redis 8.0.2 e o Mosquitto 2.0.21 reais. Não mede tempos nem desempenho.

C1 processa e demora a confirmar; morre com trabalho feito e sem confirmar. O que se repete em cada broker?

RabbitMQ

  • 7processados uma vez
  • 3com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 0sem terminar no final
MensagemEstadoEntregasProcessado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado11
m6confirmado21
m7confirmado11
m8confirmado21
m9confirmado11

Kafka (grupo clássico)

  • 7processados uma vez
  • 3com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 0sem terminar no final
MensagemEstadoEntregasProcessado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado21
m6confirmado21
m7confirmado11
m8confirmado11
m9confirmado11

Kafka (share group)

  • 7processados uma vez
  • 3com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 0sem terminar no final
MensagemEstadoEntregasProcessado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado21
m6confirmado21
m7confirmado11
m8confirmado11
m9confirmado11

Amazon SQS (com SNS)

  • 7processados uma vez
  • 3com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 0sem terminar no final
MensagemEstadoEntregasProcessado
m0confirmado22
m1confirmado22
m2confirmado22
m3confirmado21
m4confirmado21
m5confirmado11
m6confirmado11
m7confirmado11
m8confirmado11
m9confirmado11

NATS JetStream

  • 7processados uma vez
  • 3com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 0sem terminar no final
MensagemEstadoEntregasProcessado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado11
m6confirmado21
m7confirmado11
m8confirmado21
m9confirmado11

Redis Streams

  • 7processados uma vez
  • 3com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 0sem terminar no final
MensagemEstadoEntregasProcessado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado22
m4confirmado21
m5confirmado21
m6confirmado21
m7confirmado11
m8confirmado11
m9confirmado11

MQTT (Mosquitto)

  • 5processados uma vez
  • 0com o efeito repetido
  • 0perdidos
  • 0na fila de mensagens mortas ou arquivados
  • 0nunca lidos
  • 0considerados como concluídos sem serem processados
  • 0processados fora de ordem
  • 5sem terminar no final
MensagemEstadoEntregasProcessado
m0sem confirmar11
m1confirmado11
m2sem confirmar11
m3confirmado11
m4sem confirmar11
m5confirmado11
m6sem confirmar10
m7confirmado11
m8sem confirmar10
m9confirmado11