All three move messages between services, but they are built around different models. Kafka is a durable, replayable event log for streaming; RabbitMQ is a smart broker with rich routing for task queues and RPC; SQS is a fully-managed cloud queue on AWS that trades features for zero operations. The table below contrasts them on the dimensions that usually decide the choice.

DimensionApache KafkaRabbitMQAmazon SQS
Core modelDistributed, partitioned commit log (event stream)Smart broker on AMQP 0-9-1 (exchanges + queues)Fully-managed cloud queue (no broker to run)
ConsumptionPull; consumer groups track offsetsPush; broker delivers to consumersPull; poll with visibility timeout
Message retentionKept by time/size; not deleted on readDeleted once acknowledgedDeleted on delete; max 14 days retention
Replay historyYes — re-read from any offsetNo — consumed messages are goneNo — consumed messages are gone
OrderingStrict per partition (by key)Per queue; lost across competing consumersNone (Standard) / per group (FIFO)
Delivery guaranteeAt-least-once; exactly-once within KafkaAt-least-once (at-most with auto-ack)At-least-once (Standard) / exactly-once (FIFO)
RoutingTopic + partition key; no complex routingRich — direct, topic, fanout, headersNone natively; use SNS for fan-out
ThroughputVery high (millions/sec)Moderate (tens of thousands/sec)High / near-unlimited (Standard)
LatencyLow (single-digit ms)Very low (great for RPC)Higher (polling, tens of ms)
Max message size~1 MB default (configurable)Large (configurable; big msgs discouraged)256 KB (use S3 claim-check for more)
Priority messagesNoYes (priority queues)No
TTL / delayRetention-based onlyPer-message & per-queue TTLDelay up to 15 min; retention up to 14 days
Dead-letteringManual (no native DLQ)Native dead-letter exchange (DLX)Native dead-letter queue (DLQ)
Scaling unitPartitions (+ brokers)Queues + consumersAutomatic, fully managed
OperationsComplex self-host (or MSK / Confluent)Self-host cluster (or CloudAMQP)Zero ops — AWS managed
ProtocolCustom binary over TCPAMQP 0-9-1 (+ MQTT, STOMP)HTTPS REST API (AWS SDK)
Best fitEvent streaming, analytics, replay, sourcingComplex routing, task queues, RPCSimple decoupling & serverless on AWS

Which one should you reach for?

Kafka

Durable event stream

  • Many consumers read the same stream independently
  • You need to replay historical events
  • Very high throughput pipelines (logs, metrics, IoT)
  • Stream processing and event sourcing
Open Kafka topics

RabbitMQ

Smart routing broker

  • Complex routing (topic / headers / fanout)
  • Per-message priority, TTL, or RPC request-reply
  • Classic task/work queues at moderate scale
  • You want delivery features without huge volume
Open RabbitMQ topics

Amazon SQS

Managed cloud queue

  • You are on AWS and want zero operations
  • Decoupling and buffering between services
  • Distributing tasks to workers or Lambda
  • Simple fan-out when paired with SNS
Open Amazon SQS topics
One-line rule of thumb

Pick Kafka for high-volume event streams that many consumers read and replay; RabbitMQ when routing, priorities, or RPC matter at moderate scale; SQS when you are on AWS and want a simple, hands-off queue.