Text & documents
Numbers & maths
Data & formats
Security
Development & DevOps
Artificial Intelligence
Finance
Health & Wellness
Productivity
Games & Entertainment
Multimedia & design
Business
How to use
How to use it

Pick a built-in scenario or write your own in JSON. The same scenario runs on RabbitMQ, on Kafka with a classic group, on Kafka with a share group, on Amazon SQS (with SNS in front if there are several groups), on NATS JetStream, on Redis Streams and on MQTT, and they are compared: what is processed once, what is repeated, what is lost, what ends up in the dead-letter queue. Change each broker's settings and the result updates on its own.

What it is and what it is not

It is a simulator. Its rules are ported from the code of RabbitMQ 4.0.5 and 4.3.6 and Kafka 4.3.1, and calibrated against those real brokers: 5,000 random routings per version, redelivery and dead-letter scenarios, 2,000 partition keys, Java consumer group assignments, what is given up in a rebalance, where a consumer resumes after a crash (with per-batch commit and with auto-commit) and how many times a share group delivers with REJECT and with RELEASE. Also RabbitMQ's spread across consumers and, in share groups, what happens when a consumer hangs (the record comes back when the lock expires) and when it dies (released right away). SQS is calibrated against ElasticMQ 1.7.1, an EMULATOR, not against AWS: redrive, visibility, FIFO ordering by group and receipt handles; SNS comes from the AWS documentation. NATS JetStream, against real NATS 2.15.0: max_deliver, nak, ack_wait, late acks, term, distribution among clients, max_ack_pending, deliver_policy, delayed nak and backoff. Redis Streams, against real Redis 8.0.2: pending entries list, XAUTOCLAIM, group-wide XACK, rereading, $ and 0, distribution and stream trimming (MAXLEN); the delivery limit and its dead-letter queue are the usual application recipe, because Redis does not provide them. MQTT, against real Mosquitto 2.0.21: what is resent and when, persistent and clean sessions, the window of 20 in flight, shared subscriptions, QoS 0, 1 and 2 and retained messages. It does not measure timing or throughput: time is logical, in ticks (1 tick = 1 s for Kafka's defaults).

The scenario

mensajes (id, t, and optionally clave, ttl, veneno), consumidores (id, grupo, prefetch, coste, ackRetraso, entra, probFallo) and fallos (t, consumidor, tipo muere or vuelve). In RabbitMQ each grupo is a queue; in Kafka, a consumer group. A message with veneno always fails when processed.

Message brokersRabbitMQ and Kafka, same scenario
Message brokersRabbitMQ and Kafka, same scenario

Simulated. Calibrated against real RabbitMQ 4.0.5 and 4.3.6 and Kafka 4.3.1 on: routing, redeliveries, dead-letter queue, spread across consumers, partition by key, group assignment and rebalancing, where a newcomer resumes after a crash, and share group deliveries, locks and crashes. SQS against an emulator (ElasticMQ 1.7.1), not against AWS; SNS from the documentation; NATS JetStream, Redis Streams and MQTT against real NATS 2.15.0, Redis 8.0.2 and Mosquitto 2.0.21. It does not measure timing or throughput.

C1 processes and is slow to acknowledge; it dies with work done and not acknowledged. What gets repeated in each broker?

RabbitMQ

  • 7processed once
  • 3with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 0unfinished at the end
MessageStateDeliveriesProcessed
m0acknowledged22
m1acknowledged11
m2acknowledged22
m3acknowledged11
m4acknowledged22
m5acknowledged11
m6acknowledged21
m7acknowledged11
m8acknowledged21
m9acknowledged11

Kafka (classic group)

  • 7processed once
  • 3with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 0unfinished at the end
MessageStateDeliveriesProcessed
m0acknowledged22
m1acknowledged11
m2acknowledged22
m3acknowledged11
m4acknowledged22
m5acknowledged21
m6acknowledged21
m7acknowledged11
m8acknowledged11
m9acknowledged11

Kafka (share group)

  • 7processed once
  • 3with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 0unfinished at the end
MessageStateDeliveriesProcessed
m0acknowledged22
m1acknowledged11
m2acknowledged22
m3acknowledged11
m4acknowledged22
m5acknowledged21
m6acknowledged21
m7acknowledged11
m8acknowledged11
m9acknowledged11

Amazon SQS (with SNS)

  • 7processed once
  • 3with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 0unfinished at the end
MessageStateDeliveriesProcessed
m0acknowledged22
m1acknowledged22
m2acknowledged22
m3acknowledged21
m4acknowledged21
m5acknowledged11
m6acknowledged11
m7acknowledged11
m8acknowledged11
m9acknowledged11

NATS JetStream

  • 7processed once
  • 3with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 0unfinished at the end
MessageStateDeliveriesProcessed
m0acknowledged22
m1acknowledged11
m2acknowledged22
m3acknowledged11
m4acknowledged22
m5acknowledged11
m6acknowledged21
m7acknowledged11
m8acknowledged21
m9acknowledged11

Redis Streams

  • 7processed once
  • 3with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 0unfinished at the end
MessageStateDeliveriesProcessed
m0acknowledged22
m1acknowledged11
m2acknowledged22
m3acknowledged22
m4acknowledged21
m5acknowledged21
m6acknowledged21
m7acknowledged11
m8acknowledged11
m9acknowledged11

MQTT (Mosquitto)

  • 5processed once
  • 0with the effect repeated
  • 0lost
  • 0dead-lettered or archived
  • 0never read
  • 0accepted without being processed
  • 0processed out of order
  • 5unfinished at the end
MessageStateDeliveriesProcessed
m0unacknowledged11
m1acknowledged11
m2unacknowledged11
m3acknowledged11
m4unacknowledged11
m5acknowledged11
m6unacknowledged10
m7acknowledged11
m8unacknowledged10
m9acknowledged11