Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a message broker in microservices?
A message broker is a software that helps different microservices talk to each other by sending and receiving messages in a safe and organized way.
Click to reveal answer
intermediate
How does Kafka ensure message durability?
Kafka stores messages on disk and replicates them across multiple servers, so messages are safe even if one server fails.
Click to reveal answer
intermediate
What is the main difference between Kafka and RabbitMQ?
Kafka is designed for high-throughput and streaming data with a log-based storage, while RabbitMQ focuses on flexible routing and supports many messaging patterns.
Click to reveal answer
beginner
What is a queue in RabbitMQ?
A queue is a place where messages wait until a microservice is ready to process them, ensuring messages are handled one by one or in order.
Click to reveal answer
beginner
Why use message brokers in microservices architecture?
They help microservices communicate asynchronously, improve system reliability, and allow scaling by decoupling services.
Click to reveal answer
Which feature is Kafka best known for?
AHigh-throughput and log-based message storage
BFlexible message routing with exchanges
CBuilt-in message transformation
DAutomatic message prioritization
✗ Incorrect
Kafka is designed for high-throughput and stores messages in a log format for streaming.
In RabbitMQ, what is an exchange used for?
AStoring messages permanently
BCompressing messages
CRouting messages to queues based on rules
DEncrypting messages
✗ Incorrect
Exchanges route messages to queues using binding rules.
What does asynchronous communication mean in microservices?
AServices use the same database
BServices wait for each other to respond immediately
CServices communicate only once a day
DServices send messages and continue without waiting
✗ Incorrect
Asynchronous means services send messages and do not wait for immediate replies.
Which of these is NOT a benefit of using message brokers?
ADecoupling microservices
BForcing synchronous calls
CImproving system reliability
DEnabling scaling
✗ Incorrect
Message brokers enable asynchronous communication, not forcing synchronous calls.
How does RabbitMQ handle message delivery?
AMessages are routed to queues and delivered to consumers
BMessages are stored in topics only
CMessages are deleted immediately after sending
DMessages are broadcast to all services
✗ Incorrect
RabbitMQ routes messages to queues, where consumers receive them.
Explain how Kafka and RabbitMQ differ in their approach to message handling and use cases.
Think about storage style and routing flexibility.
You got /4 concepts.
Describe why message brokers are important in a microservices architecture and how they improve system design.
Consider communication style and system robustness.
You got /4 concepts.
Practice
(1/5)
1. What is the primary role of a message broker like Kafka or RabbitMQ in a microservices architecture?
easy
A. To store large amounts of user data permanently
B. To enable services to communicate asynchronously by passing messages
C. To replace the database in microservices
D. To directly execute business logic in services
Solution
Step 1: Understand message broker function
Message brokers act as middlemen that help services send and receive messages without waiting for each other.
Step 2: Identify correct role in microservices
They enable asynchronous communication, improving scalability and fault tolerance.
Final Answer:
To enable services to communicate asynchronously by passing messages -> Option B
Quick Check:
Message broker = asynchronous communication [OK]
Hint: Message brokers pass messages between services asynchronously [OK]
Common Mistakes:
Confusing brokers with databases
Thinking brokers execute business logic
Assuming brokers store permanent user data
2. Which of the following is the correct way to declare a RabbitMQ queue in code?
easy
A. channel.queueDeclare('task_queue', true, false, false, null);
B. channel.createQueue('task_queue', durable=true);
C. queue.declare('task_queue', persistent=True);
D. rabbitmq.queue('task_queue', durable=True);
Solution
Step 1: Recall RabbitMQ queue declaration syntax
In RabbitMQ Java client, channel.queueDeclare is used with parameters: queue name, durable, exclusive, autoDelete, and arguments.
Step 2: Match correct syntax
channel.queueDeclare('task_queue', true, false, false, null); matches the official method signature and parameter order correctly.
Final Answer:
channel.queueDeclare('task_queue', true, false, false, null); -> Option A
Hint: Remember RabbitMQ uses channel.queueDeclare with 5 parameters [OK]
Common Mistakes:
Using incorrect method names like createQueue
Passing parameters with wrong names or order
Confusing RabbitMQ syntax with other brokers
3. Given the following Kafka consumer code snippet, what will be the output if the topic has 3 messages and auto-commit is enabled?
consumer.subscribe(['orders'])
for message in consumer.poll(timeout_ms=1000).values():
print(message.value.decode('utf-8'))
medium
A. Prints nothing because poll returns a dict of lists
B. Prints only the first message and stops
C. Prints all 3 messages from the 'orders' topic
D. Raises an error due to wrong method usage
Solution
Step 1: Analyze Kafka consumer.poll() return type
The poll() method returns a dictionary where keys are partitions and values are lists of messages.
Step 2: Understand iteration over poll().values()
Iterating over values() gives lists of messages, not individual messages, so calling message.value will cause an error because message is a list, not a message object.
Final Answer:
Raises an error due to wrong method usage -> Option D
Quick Check:
poll() returns dict of lists; iterating directly over values and accessing message.value causes error [OK]
Hint: poll() returns dict of lists, not single messages [OK]
Common Mistakes:
Assuming poll() returns a flat list of messages
Not decoding message values properly
Ignoring that poll() returns per-partition batches
4. A developer wrote this RabbitMQ consumer code but it never receives messages:
A. The consumer must call channel.start_consuming() to begin receiving messages
B. The callback function name should be 'on_message' instead of 'process_message'
C. autoAck must be set to True for messages to be received
D. The queue name 'task_queue' is invalid and must be changed
Solution
Step 1: Understand RabbitMQ consumer lifecycle
After setting up basicConsume, the consumer must start the event loop with channel.start_consuming() to receive messages.
Step 2: Identify missing call
The code lacks start_consuming(), so no messages are delivered.
Final Answer:
The consumer must call channel.start_consuming() to begin receiving messages -> Option A
Quick Check:
Missing start_consuming() = The consumer must call channel.start_consuming() to begin receiving messages [OK]
Hint: Remember to call start_consuming() after basicConsume [OK]
Common Mistakes:
Thinking callback function name must be fixed
Believing autoAck controls message receipt
Assuming queue name is invalid without evidence
5. You need to design a scalable order processing system using Kafka. Which approach best ensures message order per customer while allowing parallel processing across customers?
hard
A. Use a single Kafka partition for all orders to keep global order
B. Use multiple topics, one per customer, to isolate order streams
C. Partition messages by customer ID so each customer's orders stay ordered in their partition
D. Send all orders to a single consumer instance to maintain order
Solution
Step 1: Understand Kafka partitioning and ordering
Kafka guarantees order only within a partition, so to keep order per customer, messages must be partitioned by customer ID.
Step 2: Evaluate options for scalability and ordering
Partitioning by customer ID allows parallel processing across partitions (customers) while preserving order per customer.
Final Answer:
Partition messages by customer ID so each customer's orders stay ordered in their partition -> Option C
Quick Check:
Partition by key for order + parallelism = Partition messages by customer ID so each customer's orders stay ordered in their partition [OK]
Hint: Partition by customer ID to keep order and scale processing [OK]