Kafka vs RabbitMQ vs Pulsar
Kafka vs RabbitMQ vs Pulsar for production workloads
These three systems solve different messaging problems even though they all move events. This comparison focuses on durability, ordering, and operational overhead with a Python-centric view.
Prerequisites
- Python 3.11+
- Access to Kafka, RabbitMQ, and Pulsar clusters
- Basic familiarity with publish/subscribe concepts
Quick comparison
| Feature | Kafka | RabbitMQ | Pulsar |
|---|---|---|---|
| Primary model | Log-based stream | Brokered queue | Log-based stream with segments |
| Storage | Brokers | Optional (memory/disk) | Brokers + BookKeeper |
| Ordering | Partition-ordered | Queue-ordered | Partition-ordered |
| Retention | Time or size | Ack-based | Time or size |
| Replay | Native | Limited | Native |
Python connectivity examples
Kafka producer with kafka-python:
1
2
3
4
5
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=["localhost:9092"])
producer.send("orders", b"order-1")
producer.flush()
RabbitMQ publisher with pika:
1
2
3
4
5
6
7
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
channel.queue_declare(queue="orders", durable=True)
channel.basic_publish(exchange="", routing_key="orders", body=b"order-1")
connection.close()
Pulsar producer with pulsar-client:
1
2
3
4
5
6
import pulsar
client = pulsar.Client("pulsar://localhost:6650")
producer = client.create_producer("orders")
producer.send(b"order-1")
client.close()
When to choose each system
- Kafka: event streaming, analytics, and replay-heavy workloads.
- RabbitMQ: task queues, request-reply, and low-latency routing.
- Pulsar: multi-tenant streaming with tiered storage and geo-replication.
Operational considerations
- Kafka needs careful tuning of partitions and retention.
- RabbitMQ scales best with multiple queues and sharding.
- Pulsar introduces BookKeeper and more moving parts but simplifies storage scaling.
Things to remember
- Kafka and Pulsar are better for durable replay and event sourcing.
- RabbitMQ excels at fine-grained routing and traditional messaging patterns.
- Align your choice with data retention, ordering, and replay requirements.
This post is licensed under CC BY 4.0 by the author.