Apache Pulsar
3.xSummary
Distributed, multi-tenant pub-sub and streaming platform that separates the serving layer (stateless brokers) from the storage layer (Apache BookKeeper), natively supports both queue-style and stream-style consumption on the same topic, and tiers cold segments to object storage without a separate compaction process.
Primary Use Case
Event streaming and CDC transport where Kafka's throughput and replay model are needed but broker/storage coupling, multi-tenant isolation, or built-in geo-replication are also required, and the team can support a two-component (broker plus BookKeeper) operational model in exchange for those properties.
Workload Fit
Strengths
Best for
- ·Event streaming requiring both queue-style and stream-style consumption on the same topic without duplicating infrastructure
- ·Multi-tenant platforms needing native namespace-level resource isolation between unrelated workloads on one cluster
- ·CDC and high-throughput pipelines where independent scaling of storage versus broker capacity is valuable
Excels when
- ·Both competing-consumer (queue) and consumer-group (stream) semantics are needed from the same underlying topic
- ·Multi-tenant isolation between workloads on a shared cluster is a hard requirement, not an application-layer convention
- ·Broker failure recovery time matters more than avoiding a second operational component (BookKeeper)
Architectural advantages
- ·Broker/storage separation means broker failure requires no data re-replication, unlike Kafka's ISR catch-up
- ·Multiple subscription types (exclusive, shared, failover) on one topic serve both queue and stream consumption patterns natively
- ·Native tiered storage to object storage without a bolt-on compaction process
- ·First-class multi-tenancy (tenants, namespaces) for resource isolation on a shared cluster
When to Avoid
Avoid when
- ·Team size or maturity cannot support two operationally distinct components (brokers and BookKeeper): this is a higher operational floor than Kafka, not a lower one
- ·The workload is a simple work queue at low-to-medium volume: the multi-tenant, dual-consumption-model complexity is unwarranted
- ·The organization already has deep Kafka operational expertise and no specific need Pulsar's broker/storage split addresses
Common misuses
- ·Treating Pulsar as a drop-in Kafka replacement without validating consumer API and semantic differences, notably subscription types versus consumer groups
- ·Using shared subscriptions and then relying on message ordering: shared mode is explicitly unordered, competing-consumer delivery
- ·Under-sizing the BookKeeper ensemble because Kafka experience suggests broker replica count alone determines durability
Consistency & Transactions
Scaling
Read scalability
Exclusive and failover subscriptions provide Kafka-consumer-group-style parallel reads across partitions; shared subscriptions provide RabbitMQ-style competing-consumer fan-out within a single partition, a mode Kafka consumer groups do not support (a Kafka partition binds to exactly one consumer within a group).
Write scalability
Write throughput scales horizontally by adding partitions and bookies independently: because storage is decoupled from the broker layer, storage capacity and broker throughput scale on separate axes, unlike Kafka where both are bound to the same broker's local disk.
Failure Behavior
Known failure modes
- ·BookKeeper ensemble under-replication: if too few bookies acknowledge a write, durability drops below the configured ensemble/write-quorum/ack-quorum settings
- ·Broker failure requires no data movement (data lives in BookKeeper, not on the broker), but a bookie failure does require re-replication, analogous to Kafka's ISR catch-up
- ·Shared subscription mode trades strict ordering for competing-consumer fan-out: message order across the topic is not preserved once more than one consumer is attached
- ·Two-component operational model (brokers plus bookies) doubles the failure surface an operator must monitor compared to Kafka's single-component brokers
Bottlenecks
- ·BookKeeper write-quorum/ack-quorum configuration bounds write latency the same way Kafka's acks=all and min.insync.replicas do
- ·Two-component capacity planning (brokers and bookies) adds a coordination dimension Kafka's single-component model does not have
Degradation patterns
- ·Bookie under-replication during node loss requires re-replication before durability targets are restored, similar in effect to Kafka under-replicated partitions
- ·Shared-subscription consumer imbalance causes uneven per-consumer load since dispatch is round-robin, not partition-affinity-based
Recovery considerations
- ·Broker replacement requires no partition data movement since storage lives in BookKeeper, a faster recovery path than Kafka broker replacement
- ·Bookie replacement does require re-replication of the segments it held, bounded by ensemble size and network bandwidth
- ·Geo-replication (built-in) provides cross-cluster recovery options Kafka requires MirrorMaker or a third-party tool to achieve
Operational Pitfalls
- ·Running brokers and bookies without understanding the broker/storage separation: capacity planning must account for both layers independently
- ·Using shared subscriptions where strict per-key ordering is required: shared mode is explicitly competing-consumer, not ordered
- ·Under-provisioning BookKeeper ensemble size for the required durability level: default settings are not automatically production-safe
Architecture Guidance
Common topology roles
Migration notes
- ·From Kafka to Pulsar: partition-level ordering and consumer-group semantics carry over conceptually, but subscription type (exclusive/shared/failover) must be chosen deliberately, it has no direct Kafka equivalent
- ·From RabbitMQ to Pulsar: shared subscriptions provide the closest equivalent to a competing-consumers work queue, but Pulsar retains a replayable log underneath, unlike RabbitMQ's consumption-destructive queue
Advisor Guidance
When: scenario needs both queue-style and stream-style consumption from the same event data
Pulsar's subscription types (exclusive, shared, failover) support both consumption models on one topic; evaluate before standing up separate Kafka and RabbitMQ deployments for the two use cases
When: scenario has team_maturity below senior
Pulsar's two-component operational model (brokers plus BookKeeper) requires at least the same operational maturity as Kafka, and adds a second component to monitor: consider a managed offering (StreamNative Cloud) to reduce ops burden
Comparison Factors
operational complexity
High: two distinct components (brokers, BookKeeper) to operate, a higher floor than Kafka's single-component model
throughput
Very high: comparable to Kafka at the high end, with independent broker/storage scaling
consumption model flexibility
Highest of the broker profiles: exclusive, shared, and failover subscriptions on one topic cover both queue and stream semantics
broker failure recovery
Faster than Kafka: broker replacement requires no partition data movement since storage lives in BookKeeper
Managed Cloud Options
Enables Patterns
Basis
Mature, production-deployed technology (Apache top-level project) with documented broker/storage separation and subscription-type semantics; smaller operational deployment base than Kafka, so benchmark and incident-pattern documentation is less extensive
Sources & Claims
Pulsar separates the serving layer (stateless brokers) from the storage layer (Apache BookKeeper); a broker holding a partition's traffic can fail and be replaced without any partition data movement, because the data was never stored on that broker's local disk
pendingofficial documentation · Apache Pulsar documentation, Concepts and Architecture: Broker and BookKeeper
messaging-knowledge-completion batch, added alongside SQS and Google Pub/Sub profiles
A single Pulsar topic supports multiple subscription types concurrently: exclusive (single consumer), shared (round-robin competing consumers, unordered), and failover (one active consumer with automatic standby promotion), letting one topic serve both queue-style and stream-style consumption
pendingofficial documentation · Apache Pulsar documentation, Concepts and Architecture: Subscriptions
messaging-knowledge-completion batch