Bird
Raised Fist0
Kafkadevops~5 mins

Why consumers process messages in Kafka - Why It Works

Choose your learning style10 modes available
Introduction
In Kafka, messages are sent to topics by producers. Consumers read these messages to perform tasks like updating databases, triggering actions, or analyzing data. Processing messages ensures that the information sent by producers is used effectively in real applications.
When you want to update a user profile in your database after receiving new user data
When you need to trigger an email notification after a purchase event is recorded
When you want to analyze streaming data for real-time insights, like monitoring sensor data
When you need to synchronize data between different systems by reading messages from Kafka
When you want to build a scalable system that reacts to events as they happen
Commands
This command starts a Kafka consumer that reads the first 5 messages from the topic 'example-topic' from the beginning. It shows how consumers process messages by reading them from Kafka.
Terminal
kafka-console-consumer --bootstrap-server localhost:9092 --topic example-topic --from-beginning --max-messages 5
Expected OutputExpected
Message 1 content Message 2 content Message 3 content Message 4 content Message 5 content
→
--from-beginning - Reads messages from the start of the topic, not just new messages
→
--max-messages - Limits the number of messages to read before stopping
This command shows the status of the consumer group 'example-group', including which messages have been processed. It helps verify that consumers are processing messages correctly.
Terminal
kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group example-group
Expected OutputExpected
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID example-topic 0 10 10 0 consumer-1 /127.0.0.1 consumer-1-client
→
--group - Specifies the consumer group to check
Key Concept

Consumers process messages to turn data sent by producers into useful actions or results in real time.

Common Mistakes
Not committing offsets after processing messages
Kafka will think messages are not processed and may resend them, causing duplicate work
Always commit offsets after successfully processing messages to mark them as done
Reading messages only from the latest offset without from-beginning when testing
You might miss earlier messages needed for testing or replay
Use --from-beginning flag to read all messages from the start when needed
Summary
Use kafka-console-consumer to read and process messages from a topic.
Check consumer group status to verify message processing and lag.
Commit offsets to avoid reprocessing the same messages.

Practice

(1/5)
1. Why do Kafka consumers process messages from topics?
easy
A. To create new topics automatically
B. To read and use data sent by producers
C. To delete messages from the topic
D. To send messages to other consumers

Solution

  1. Step 1: Understand the role of consumers in Kafka

    Consumers read messages produced by producers to get data for processing.
  2. Step 2: Identify the purpose of processing messages

    Processing messages allows applications to react to new information sent by producers.
  3. Final Answer:

    To read and use data sent by producers -> Option B
  4. Quick Check:

    Consumers read messages = To use data [OK]
Hint: Consumers read messages to get data from producers [OK]
Common Mistakes:
  • Thinking consumers send messages
  • Confusing consumers with producers
  • Believing consumers delete messages
2. Which of the following is the correct way for a Kafka consumer to subscribe to a topic named orders in Java?
easy
A. consumer.listen("orders");
B. consumer.subscribe("orders");
C. consumer.connect("orders");
D. consumer.subscribe(Collections.singletonList("orders"));

Solution

  1. Step 1: Recall Kafka consumer subscription syntax in Java

    The consumer.subscribe method expects a collection of topic names, usually a list.
  2. Step 2: Check each option's syntax

    consumer.subscribe(Collections.singletonList("orders")); uses Collections.singletonList("orders"), which is correct. Options A, B, and D use incorrect methods or argument types.
  3. Final Answer:

    consumer.subscribe(Collections.singletonList("orders")); -> Option D
  4. Quick Check:

    subscribe needs a list of topics [OK]
Hint: Use subscribe with a list of topics in Java [OK]
Common Mistakes:
  • Passing a string instead of a list
  • Using non-existent methods like listen or connect
  • Forgetting to import Collections
3. Given the following Kafka consumer code snippet in Python, what will be printed?
from kafka import KafkaConsumer

consumer = KafkaConsumer('test-topic', bootstrap_servers=['localhost:9092'])
for message in consumer:
    print(message.value.decode('utf-8'))
    break
medium
A. The first message's value from 'test-topic' decoded as UTF-8
B. All messages from 'test-topic' printed continuously
C. An error because decode is not a method
D. No output because the loop breaks immediately

Solution

  1. Step 1: Understand the consumer loop behavior

    The for loop reads messages from 'test-topic' one by one.
  2. Step 2: Analyze the print and break statements

    The first message's value is decoded from bytes to string and printed, then the loop breaks immediately.
  3. Final Answer:

    The first message's value from 'test-topic' decoded as UTF-8 -> Option A
  4. Quick Check:

    Print first message then break = first message only [OK]
Hint: Loop breaks after first message, so only one prints [OK]
Common Mistakes:
  • Thinking all messages print
  • Confusing decode method usage
  • Assuming no output due to break
4. What is wrong with this Kafka consumer code snippet in Java?
KafkaConsumer consumer = new KafkaConsumer<>(props);
consumer.subscribe("my-topic");
while(true) {
    ConsumerRecords records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord record : records) {
        System.out.println(record.value());
    }
}
medium
A. poll method should not have a timeout argument
B. ConsumerRecord does not have a value() method
C. subscribe method requires a collection, not a single string
D. The while loop should be replaced with a for loop

Solution

  1. Step 1: Check the subscribe method usage

    In Kafka Java client, subscribe expects a collection of topic names, not a single string.
  2. Step 2: Verify other code parts

    poll with Duration is correct, ConsumerRecord has value(), and while(true) is valid for continuous consumption.
  3. Final Answer:

    subscribe method requires a collection, not a single string -> Option C
  4. Quick Check:

    subscribe needs list of topics [OK]
Hint: subscribe needs a list, not a single string [OK]
Common Mistakes:
  • Passing a string directly to subscribe
  • Misunderstanding poll method arguments
  • Thinking ConsumerRecord lacks value()
5. You want your Kafka consumer to process messages only from the latest offset to react quickly to new data. Which consumer configuration should you set before subscribing?
hard
A. "auto.offset.reset" to "latest"
B. "enable.auto.commit" to false
C. "group.id" to a unique value each time
D. "max.poll.records" to 1

Solution

  1. Step 1: Understand offset reset behavior

    Setting "auto.offset.reset" to "latest" makes the consumer start reading from the newest messages if no committed offset exists.
  2. Step 2: Evaluate other options

    "enable.auto.commit" controls offset commits, "group.id" identifies consumer groups, and "max.poll.records" limits batch size but doesn't affect starting offset.
  3. Final Answer:

    "auto.offset.reset" to "latest" -> Option A
  4. Quick Check:

    Start from latest messages = auto.offset.reset=latest [OK]
Hint: Set auto.offset.reset to latest to read newest messages [OK]
Common Mistakes:
  • Confusing offset reset with auto commit
  • Changing group.id to control offset start
  • Using max.poll.records to control offset
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard