Skip to main content
Pattern

Pub/Sub

Problem

You want to broadcast an event to multiple consumers without coupling the producer to the list of consumers.

Context

The producer publishes 'user signed up'; N downstream services (email, analytics, feature enablement) each react independently.

Solution

Producers publish to topics; consumers subscribe to topics. The pub/sub broker (Kafka, Redis, RabbitMQ, GCP Pub/Sub) delivers each message to every subscriber. New consumers can subscribe without producers knowing.

Trade-offs

  • Every consumer must process the message — one slow consumer doesn't slow others (with independent queues)
  • Message ordering guarantees vary — Kafka gives per-partition order; Redis pub/sub gives none
  • Delivery semantics vary — at-least-once is common, exactly-once is expensive

Failure modes

  • Consumer crashes and misses messages (unless durable subscription — Kafka offset, SQS queue)
  • One malformed message poisons all subscribers
  • Fan-out amplification: 1 message → 10 subscribers × 100ms processing = 10 CPU-seconds

When to use

  • Broadcasting domain events to multiple downstream services
  • Decoupling producers from the specific list of consumers

When NOT to use

  • Single producer + single consumer with strict ordering — use a queue
  • Latency-critical paths — pub/sub adds hops