ulearn/systems

topics / async-messaging

RabbitMQ vs Kafka

Smart broker vs. dumb log — not a benchmark, a difference in what each one actually does at runtime. Watch the same published event get pushed to a worker and deleted on ack on one side, while it sits in a log getting pulled by independent consumer groups on the other. Then use Match to score a workload's traits, or Study for the full scenario-by-scenario reasoning.

RabbitMQ — smart brokerproducerfanout exchangequeueworkerKafka — distributed logproducertopic · 4 partitions1 consumer group

Recommendation

RabbitMQ

RabbitMQ4.5
Kafka0.5

Points rank which traits matter most for this workload — not a precise formula.

  • RabbitMQ: Moderate volume doesn't need a partitioned log to keep up. A single well-configured RabbitMQ queue (or a handful, sharded manually) handles this comfortably, with a much simpler operational footprint than running a Kafka cluster.
  • RabbitMQ: This is a worker pool pulling discrete jobs off one backlog. RabbitMQ's competing-consumer queue — per-message ack, prefetch limits, priority queues — is purpose-built for exactly this. Kafka caps your parallelism at the partition count and only gives you offset commits, not a per-message ack.

Load a real scenario

Or describe your own workload

Do consumers ever need to replay history?

How does a message decide where it goes?

Traffic volume

Ordering requirement

Who's on the other end?

Once a message is processed, it's...