Kafka RabbitMQ NATS
Paradigm: Log Queue Pub/Sub
Data model: Append-only Transient Fire-and-forget
partitioned (or durable) (or JetStream)
log queue stream
```
## Feature Comparison
| Feature | Kafka | RabbitMQ | NATS (JetStream) |
|---------|-------|----------|-------------------|
| Ordering | Per-partition | Per-queue | Per-stream/subject |
| Delivery | At-least-once, exactly-once | At-least-once, at-most-once | At-least-once, exactly-once |
| Message retention | Time/size-based (days-weeks) | Until consumed | Time/size-based |
| Consumer groups | Yes (offset-based) | Yes (competing consumers) | Yes (pull/push) |
| Replay | Yes (seek to offset) | No (unless dead-lettered) | Yes (seek to sequence) |
| Routing | Topic + partition key | Exchanges, bindings, routing keys | Subject hierarchy, wildcards |
| Protocol | Custom binary | AMQP 0.9.1, MQTT, STOMP | NATS protocol, WebSocket |
| Backpressure | Consumer controls pace | Prefetch count | Pull-based, flow control |