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