Message Systems Comparison
Message Systems Comparison¶
Difficulty: βββ
Overview¶
Various message systems have their own design philosophies and strengths. In this chapter, you will learn the core concepts and differences between Apache Kafka, RabbitMQ, and AWS SQS/SNS, and understand the criteria for selecting the right system for your use case.
Table of Contents¶
- Apache Kafka
- RabbitMQ
- AWS SQS/SNS
- System Comparison and Selection Criteria
- Hybrid Architecture
- Practice Problems
1. Apache Kafka¶
Kafka Overview¶
Kafka is a distributed streaming platform developed by LinkedIn that provides high throughput and durability.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Kafka Cluster β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β Broker 1 β β Broker 2 β β Broker 3 β β β
β β β (Leader) β β (Follower) β β (Follower) β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β² β
β β ZooKeeper / KRaft β
β β (Cluster metadata management) β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ZooKeeper Ensemble β β
β β ββββββββββ ββββββββββ ββββββββββ β β
β β β ZK 1 β β ZK 2 β β ZK 3 β β β
β β ββββββββββ ββββββββββ ββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Topic and Partition¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Topic and Partition β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Topic: "orders" (3 Partitions) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Partition 0 (Broker 1) β β
β β ββββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ β β
β β β 0 β 1 β 2 β 3 β 4 β 5 β βββΊ offset β β
β β ββββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Partition 1 (Broker 2) β β
β β ββββββ¬βββββ¬βββββ¬βββββ¬βββββ β β
β β β 0 β 1 β 2 β 3 β 4 β β β
β β ββββββ΄βββββ΄βββββ΄βββββ΄βββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Partition 2 (Broker 3) β β
β β ββββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ β β
β β β 0 β 1 β 2 β 3 β 4 β 5 β 6 β β β
β β ββββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Characteristics: β
β - Order is guaranteed within each partition β
β - Order is NOT guaranteed across partitions β
β - Parallel processing scales with partition count β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Consumer Group¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Consumer Group β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Topic: "orders" (4 Partitions) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β P0 P1 P2 P3 β β
β βββββ¬ββββββββ¬ββββββββ¬ββββββββ¬ββββββββββββββββββββββββββββββββββββ β
β β β β β β
β β β β β β
β βββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββββββββββββββββββββββββ β
β β Consumer Group A (Order Service) β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β β βConsumer 1β βConsumer 2β βConsumer 3β β β
β β β P0, P1 β β P2 β β P3 β β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β β β
β βββββ΄ββββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββββββββββββββββββββββββ β
β β Consumer Group B (Analytics) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Consumer 1 (P0, P1, P2, P3) β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Rules: β
β - One partition is consumed by only one Consumer in the group β
β - Consumer > Partition count β Some Consumers are idle β
β - Consumer < Partition count β Some Consumers handle multiple β
β partitions β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Offset Management¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Offset Management β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Partition 0: β
β ββββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ β
β β 0 β 1 β 2 β 3 β 4 β 5 β 6 β 7 β 8 β 9 β β
β ββββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ β
β β² β² β² β
β β β β β
β Committed Offset Current Position Log End Offset β
β (Position the (Currently (Latest message) β
β Consumer processing) β
β acknowledged) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β __consumer_offsets (internal topic): β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Group: order-service, Topic: orders, Partition: 0 β β
β β Committed Offset: 5 β β
β β Timestamp: 2024-01-15T10:30:00Z β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Offset Reset Policies: β
β - earliest: From the beginning (all messages) β
β - latest: From the newest (new messages only) β
β - none: Error if no offset exists β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Kafka as a Distributed Log¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka = Distributed Commit Log β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Traditional Message Queue: β
β βββββββββββββββββββββββββββββββββββββββ β
β β [msg] ββ Queue ββ Consumer ββ Deleteβ β
β βββββββββββββββββββββββββββββββββββββββ β
β β
β Kafka (Log-based): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Append-Only Log β β
β β ββββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ β β
β β β 0 β 1 β 2 β 3 β 4 β 5 β 6 β 7 β βββΊ Append new msg β β
β β ββββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ β β
β β β² β² β² β β
β β Consumer A Consumer B Consumer C β β
β β (offset 1) (offset 3) (offset 6) β β
β β β β
β β - Messages are NOT deleted (retained until retention period) β β
β β - Each Consumer manages its own offset β β
β β - Can reprocess past messages (replay) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Advantages: β
β - Supports event sourcing β
β - Easy reprocessing on failure recovery β
β - Multiple Consumers process same data independently β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Kafka Replication¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kafka Replication β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Topic: orders, Partition 0 (Replication Factor: 3) β
β β
β ββββββββββββββββββββββ β
β β Broker 1 β β
β β ββββββββββββββββ β β
β β β P0 (Leader) ββββΌββββββ Producer (writes) β
β β β [0][1][2][3] ββββΌββββββ Consumer (reads) β
β β ββββββββββββββββ β β
β βββββββββββ¬βββββββββββ β
β β Replicate β
β ββββββββ΄βββββββ β
β βΌ βΌ β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β Broker 2 β β Broker 3 β β
β β ββββββββββββββββ β β ββββββββββββββββ β β
β β βP0 (Follower) β β β βP0 (Follower) β β β
β β β [0][1][2][3] β β β β [0][1][2][3] β β β
β β ββββββββββββββββ β β ββββββββββββββββ β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β
β ISR (In-Sync Replicas): β
β - List of replicas synchronized with Leader β
β - acks=all: ACK after write complete to all ISR β
β - On Leader failure, one of ISR becomes new Leader β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2. RabbitMQ¶
RabbitMQ Overview¶
RabbitMQ is a traditional message broker based on the AMQP protocol.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RabbitMQ Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββββββββββββββββββββββββββββ βββββββββββ β
β β Producer ββββββΊβ RabbitMQ Broker βββββΊβConsumer β β
β ββββββββββββ β ββββββββββββ βββββββββββββββ β βββββββββββ β
β β β Exchange βββββΊβ Queue β β β
β β ββββββββββββ βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββ β
β β
β Core Components: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1. Exchange: Defines message routing rules β β
β β 2. Queue: Message storage β β
β β 3. Binding: Connection between Exchange and Queue β β
β β 4. Routing Key: Key for routing decisions β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Exchange Types¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Exchange Types β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Direct Exchange: β
β ββββββββββββ ββββββββββββ βββββββββββ β
β β Producer β β Direct β β Queue A β (routing_key=error) β
β β ββββββΊβ Exchange ββββββΊβ β β
β β (error) β β β βββββββββββ β
β ββββββββββββ β β βββββββββββ β
β β ββββββΊβ Queue B β (routing_key=info) β
β ββββββββββββ βββββββββββ β
β β
β β Delivers to Queue where routing_key exactly matches β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 2. Topic Exchange: β
β ββββββββββββ ββββββββββββ ββββββββββββββββββββββββββββββββββββ
β β Producer β β Topic β β Queue A: *.error ββ
β β ββββββΊβ Exchange ββββββΊβ (orders.error, users.error) ββ
β β(orders. β β β ββββββββββββββββββββββββββββββββββββ
β β error) β β β ββββββββββββββββββββββββββββββββββββ
β ββββββββββββ β ββββββΊβ Queue B: orders.* ββ
β β β β (orders.error, orders.info) ββ
β ββββββββββββ ββββββββββββββββββββββββββββββββββββ
β β
β β Pattern matching (* = one word, # = zero or more) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 3. Fanout Exchange: β
β ββββββββββββ ββββββββββββ βββββββββββ β
β β Producer β β Fanout ββββββΊβ Queue A β β
β β ββββββΊβ Exchange ββββββΊβ Queue B β Copy to all Queues β
β β β β ββββββΊβ Queue C β β
β ββββββββββββ ββββββββββββ βββββββββββ β
β β
β β Ignores routing_key, broadcasts to all bound Queues β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 4. Headers Exchange: β
β ββββββββββββ ββββββββββββ βββββββββββ β
β β Producer β β Headers ββββββΊβ Queue A β β
β β headers: ββββββΊβ Exchange β β x-match:β β
β β{type:pdf}β β β β all, β β
β ββββββββββββ ββββββββββββ βtype:pdf β β
β βββββββββββ β
β β
β β Routing based on message headers β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RabbitMQ Routing Example¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Topic Exchange Routing Example β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Topic Exchange: "logs" β
β β
β Bindings: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Queue Binding Key β β
β β error_logs *.error β β
β β web_logs web.* β β
β β all_logs # β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Message Routing: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Routing Key Goes to β β
β β web.error error_logs, web_logs, all_logs β β
β β web.info web_logs, all_logs β β
β β db.error error_logs, all_logs β β
β β cache.warning all_logs β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Pattern Rules: β
β - * (star): Exactly one word β
β - # (hash): Zero or more words β
β - Example: stock.# β stock.usd.nyse, stock.eur β
β stock.* β stock.usd (O), stock.usd.nyse (X) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RabbitMQ Message Acknowledgment¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Message Acknowledgment β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββ ββββββββββββ β
β β Queue β βConsumer β β App β β
β ββββββ¬ββββββ ββββββ¬βββββ ββββββ¬ββββββ β
β β β β β
β βββ Deliver βββββΊβ β β
β β βββ Process ββββΊβ β
β β β β Processing... β
β β ββββ Done βββββββ β
β ββββ ACK βββββββββ β β
β β β β β
β β (Delete msg) β β β
β β
β ACK Modes: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β auto-ack: true β ACK immediately on delivery (At-Most-Once) β β
β β auto-ack: false β Explicit ACK required (At-Least-Once) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β NACK/Reject: β
β - basic_nack: Reject message (with requeue option) β
β - basic_reject: Reject single message β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RabbitMQ High Availability¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RabbitMQ Clustering β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Classic Mirrored Queue (deprecated): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Node 1 (Master) Node 2 (Mirror) Node 3 (Mirror) β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β Queue: Q1 βββββΊβ Queue: Q1 βββββΊβ Queue: Q1 β β β
β β β [msg][msg] β β [msg][msg] β β [msg][msg] β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Quorum Queue (Recommended): β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Raft-based Consensus β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β Leader β β Follower β β Follower β β β
β β β Node 1 βββββΊβ Node 2 βββββΊβ Node 3 β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β β
β β - Stronger data consistency β β
β β - Automatic leader election β β
β β - Improved poison message handling β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. AWS SQS/SNS¶
AWS SQS (Simple Queue Service)¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AWS SQS Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββββββββββββββββββββββββββ βββββββββββ β
β β Producer ββββββΊβ SQS Queue ββββββΊβConsumer β β
β ββββββββββββ β βββββββββββββββββββββββββββ β βββββββββββ β
β β β Distributed Storage β β β
β β β (Multiple AZs) β β β
β β β [msg][msg][msg][msg] β β β
β β βββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββ β
β β
β Fully Managed Service: β
β - Unlimited throughput β
β - Auto scaling β
β - No infrastructure management β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Standard vs FIFO Queue¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Standard Queue vs FIFO Queue β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Standard Queue: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Sent: A β B β C β D β β
β β Received: A β C β B β D (Order not guaranteed) β β
β β or A β A β B β C β D (Duplicates possible) β β
β β β β
β β Characteristics: β β
β β - Max throughput: Nearly unlimited β β
β β - At-Least-Once delivery β β
β β - Best-Effort ordering β β
β β - Price: Low β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β FIFO Queue: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Sent: A β B β C β D β β
β β Received: A β B β C β D (Order guaranteed!) β β
β β β β
β β Characteristics: β β
β β - Max throughput: 3,000 msgs/sec (30,000 with batching) β β
β β - Exactly-Once processing β β
β β - Strict order guarantee β β
β β - Parallel processing with Message Group ID β β
β β - Price: About 1.2x Standard β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
FIFO Message Groups¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FIFO Message Groups β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β FIFO Queue β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Message Group: user-123 β β β
β β β [order1] β [order2] β [order3] Order guaranteed β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Message Group: user-456 β β β
β β β [order1] β [order2] Order guaranteed β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Message Group: user-789 β β β
β β β [order1] Order guaranteed β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββ βββββββββββ βββββββββββ β
β βConsumer1β βConsumer2β βConsumer3β β
β βββββββββββ βββββββββββ βββββββββββ β
β β
β - Order guaranteed only within same Group β
β - Different Groups can be processed in parallel β
β - Balance between scalability and order guarantee β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
AWS SNS (Simple Notification Service)¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AWS SNS (Pub/Sub) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββ β
β ββββββββββββ β SNS Topic β β
β βPublisher βββββββββΊβ "order-events" β β
β ββββββββββββ ββββββββββ¬βββββββββ β
β β β
β βββββββββββββββββββββββΌββββββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β SQS Queue β β Lambda β β HTTP β β
β β (Order Svc) β β (Analytics) β β (Webhook) β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β Supported Subscribers: β
β - SQS Queue β
β - Lambda Function β
β - HTTP/HTTPS Endpoint β
β - Email/SMS β
β - Mobile Push β
β - Kinesis Data Firehose β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SNS + SQS Fan-out Pattern¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SNS + SQS Fan-out β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββββββ β
β β PublisherββββββΊβ SNS Topic β β
β β (Order) β β β β
β ββββββββββββ ββββββββ¬βββββββ β
β β β
β βββββββββββββββββββββΌββββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββ ββββββββββ ββββββββββ β
β βSQS: Q1 β βSQS: Q2 β βSQS: Q3 β β
β βInventoryβ βPayment β βEmail β β
β βββββ¬βββββ βββββ¬βββββ βββββ¬βββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββ ββββββββββ ββββββββββ β
β βInventoryβ βPayment β βEmail β β
β βService β βService β βService β β
β ββββββββββ ββββββββββ ββββββββββ β
β β
β Advantages: β
β - Complete decoupling between services β
β - Independent scaling per service β
β - Fault isolation β
β - Individual retry/DLQ management β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4. System Comparison and Selection Criteria¶
Core Characteristics Comparison¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Message System Comparison β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββ¬βββββββββββββ¬βββββββββββββ¬βββββββββββββ β
β β Feature β Kafka β RabbitMQ β AWS SQS β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Throughput β Very High β High β High β β
β β β Millions/s β 10K+/sec β Unlimited* β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Latency β Low β Very Low β Medium β β
β β β ms level β sub-ms β tens of ms β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Order β Within β Within β FIFO only β β
β β Guarantee β partition β queue β β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Message β Config β Delete on β Max 14 β β
β β Retention β period β consume β days β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Replay β O β X β X β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Routing β Simple β Flexible β Simple β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Ops β High β Medium β Low β β
β β Complexity β β β β β
β ββββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββ€ β
β β Cost Model β Infra cost β Infra cost β Usage-basedβ β
β ββββββββββββββ΄βββββββββββββ΄βββββββββββββ΄βββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Use Case Recommendations¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Use Case Selection Guide β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Choose Kafka when: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Real-time streaming/analytics (clickstream, logs) β β
β β - Event sourcing / CQRS β β
β β - High throughput needed β β
β β - Message replay needed β β
β β - Long-term data retention β β
β β Examples: Log collection, metrics collection, real-time β β
β β analytics β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Choose RabbitMQ when: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Complex routing requirements β β
β β - Low latency essential β β
β β - Traditional work queue β β
β β - Various messaging patterns (RPC, Priority Queue) β β
β β - AMQP protocol needed β β
β β Examples: Work distribution, microservices communication, IoT β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Choose AWS SQS/SNS when: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Leveraging AWS ecosystem β β
β β - Minimize infrastructure management β β
β β - Unpredictable traffic β β
β β - Quick setup needed β β
β β - Lambda triggers β β
β β Examples: Serverless architecture, startups, rapid prototyping β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Selection Flowchart¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Message System Selection Flow β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Start β
β β β
β βΌ β
β βββββββββββββββββ β
β β Using AWS? β β
β β Want minimal β β
β β management? β β
β βββββββββ¬ββββββββ β
β Yes β No β
β ββββββ΄βββββ β
β βΌ βΌ β
β βββββββββββ ββββββββββββββββββ β
β βAWS SQS/ β β Event streaming/β β
β βSNS β β Replay needed? β β
β βββββββββββ βββββββββ¬βββββββββ β
β Yes β No β
β ββββββ΄βββββ β
β βΌ βΌ β
β βββββββββββ ββββββββββββββββββ β
β β Kafka β β Complex routing/β β
β β β β Low latency? β β
β βββββββββββ βββββββββ¬βββββββββ β
β Yes β No β
β ββββββ΄βββββ β
β βΌ βΌ β
β βββββββββββ βββββββββββ β
β βRabbitMQ β β Either β β
β β β β works β β
β βββββββββββ βββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
5. Hybrid Architecture¶
Kafka + RabbitMQ Combination¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hybrid Architecture Example β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Event Bus (Kafka) β β
β βββββββββββββ β - Event store β β
β β Service βββββββββββΊβ - Event replay β β
β β Events β β - Analytics pipeline β β
β βββββββββββββ ββββββββββββββββββ¬βββββββββββββββββββββββββ β
β β β
β β Event transform/filter β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Task Queue (RabbitMQ) β β
β β - Work distribution β β
β β - Complex routing β β
β β - Priority handling β β
β ββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββΌββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββ β
β βWorker 1 ββWorker 2 ββWorker 3 β β
β βββββββββββββββββββββββββββββββββ β
β β
β Leveraging each system's strengths: β
β - Kafka: Event log, streaming, analytics β
β - RabbitMQ: Work queue, complex workflows β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
6. Practice Problems¶
Practice 1: System Selection¶
Choose the appropriate message system for the following requirements and explain your reasoning:
- Real-time stock trading system (millisecond latency)
- E-commerce order event log (3-year retention)
- Image resizing work queue (priority needed)
- Serverless-based startup MVP
- IoT sensor data collection (1 million events/second)
Practice 2: Kafka Topic Design¶
Design Kafka topics for an online shopping mall order system: - Partition count decision - Partition key selection - Consumer Group configuration - Retention policy
Practice 3: RabbitMQ Routing Design¶
Design RabbitMQ Exchange/Queue for a log collection system: - Routing by log level (error, warn, info, debug) - Routing by service (web, api, db) - All error logs to notification service - All logs from specific service to debugging service
Next Steps¶
Learn about basic concepts of microservices architecture in 13_Microservices_Basics.md!
References¶
- Apache Kafka Documentation
- RabbitMQ Official Documentation
- AWS SQS/SNS Documentation
- "Kafka: The Definitive Guide" - Neha Narkhede
- "RabbitMQ in Depth" - Gavin M. Roy