Chapter 15: Message Queues — Kafka, RabbitMQ, Patterns

Why Message Queues?

RabbitMQ vs Kafka

AspectRabbitMQKafka
ModelMessage broker (smart broker, dumb consumer)Distributed log (dumb broker, smart consumer)
DeliveryPush to consumersConsumers pull from log
RetentionDelete after consumedRetain for configured period (days/weeks)
Throughput~50K msg/sec~1M msg/sec
OrderingPer-queuePer-partition
Best forTask queues, RPC, routingEvent streaming, log aggregation, high throughput

Kafka Architecture

Producer ──► Topic (partitioned) ├── Partition 0: [msg1][msg2][msg5][msg8] ├── Partition 1: [msg3][msg4][msg6] └── Partition 2: [msg7][msg9][msg10] ▲ Consumer Group A: ──────────────────┘ Consumer 1 reads Partition 0 Consumer 2 reads Partition 1 Consumer 3 reads Partition 2 (parallel processing, each message processed once)

Common Patterns

Delivery Guarantees

GuaranteeMeaningUse Case
At-most-onceMay lose messages, never duplicateMetrics (losing one data point is OK)
At-least-onceNever lose, may duplicateMost systems (consumers must be idempotent)
Exactly-onceNever lose, never duplicateFinancial (hard to achieve, Kafka supports it)
Key Takeaways