Bird
Raised Fist0
Kafkadevops~5 mins

Consumer API basics in Kafka - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main role of a Kafka Consumer?
A Kafka Consumer reads data from Kafka topics. It subscribes to topics and processes the messages sent by producers.
Click to reveal answer
beginner
What does 'subscribe()' method do in Kafka Consumer API?
The subscribe() method tells the consumer which topics to listen to. It allows the consumer to receive messages from those topics.
Click to reveal answer
beginner
Explain what 'poll()' method does in Kafka Consumer API.
The poll() method fetches records from the Kafka broker. It waits for new messages and returns them for processing.
Click to reveal answer
intermediate
Why is committing offsets important in Kafka Consumer?
Committing offsets tells Kafka which messages have been processed. This helps avoid processing the same message twice after a restart.
Click to reveal answer
intermediate
What is the difference between automatic and manual offset commit?
Automatic commit happens periodically without user control, while manual commit lets the user decide when to save the offset after processing messages.
Click to reveal answer
What method does a Kafka Consumer use to start receiving messages from a topic?
Asubscribe()
Bconnect()
Csend()
Dcommit()
Which method fetches messages from Kafka for the consumer to process?
Aread()
Bfetch()
Creceive()
Dpoll()
Why do consumers commit offsets?
ATo send messages to Kafka
BTo mark messages as processed
CTo subscribe to topics
DTo create new topics
What happens if a consumer does not commit offsets?
AIt may reprocess messages after restart
BIt will lose messages permanently
CIt cannot subscribe to topics
DIt will send duplicate messages
Which of these is a valid way to control offset commits?
AProducer acknowledgments
BAutomatic topic creation
CManual commit
DBroker replication
Describe the basic steps a Kafka Consumer takes to read messages from a topic.
Think about how the consumer connects, gets data, and remembers progress.
You got /4 concepts.
    Explain why offset management is important in Kafka Consumer API.
    Consider what happens if the consumer restarts.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of the Kafka Consumer API?
      easy
      A. To send messages to Kafka topics
      B. To delete Kafka topics
      C. To create Kafka topics
      D. To read messages from Kafka topics

      Solution

      1. Step 1: Understand Kafka Consumer API role

        The Consumer API is designed to read or consume messages from Kafka topics.
      2. Step 2: Differentiate from Producer API

        The Producer API sends messages, while Consumer API reads them.
      3. Final Answer:

        To read messages from Kafka topics -> Option D
      4. Quick Check:

        Consumer API = Read messages [OK]
      Hint: Consumer API reads messages, Producer API sends messages [OK]
      Common Mistakes:
      • Confusing Consumer API with Producer API
      • Thinking Consumer API creates or deletes topics
      • Mixing up reading and writing operations
      2. Which of the following is the correct way to create a Kafka consumer in Java?
      easy
      A. new KafkaProducer<>(properties);
      B. new KafkaConsumer<>(properties);
      C. KafkaConsumer.create(properties);
      D. KafkaConsumer.start(properties);

      Solution

      1. Step 1: Recall Kafka consumer instantiation syntax

        Kafka consumer is created by calling the constructor: new KafkaConsumer<>(properties);
      2. Step 2: Eliminate incorrect options

        Producer is for sending messages, so new KafkaProducer<>(properties); is wrong. Options C and D are not valid KafkaConsumer methods.
      3. Final Answer:

        new KafkaConsumer<>(properties); -> Option B
      4. Quick Check:

        Constructor new KafkaConsumer<>(props) = Correct [OK]
      Hint: Use new KafkaConsumer<>(props) to create consumer [OK]
      Common Mistakes:
      • Using KafkaProducer instead of KafkaConsumer
      • Calling non-existent static methods
      • Confusing method names for creation
      3. Given the following Java code snippet, what will be the output if the topic has two messages "Hello" and "World"?
      Properties props = new Properties();
      props.put("bootstrap.servers", "localhost:9092");
      props.put("group.id", "test-group");
      props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
      props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
      KafkaConsumer consumer = new KafkaConsumer<>(props);
      consumer.subscribe(Collections.singletonList("my-topic"));
      ConsumerRecords records = consumer.poll(Duration.ofMillis(1000));
      for (ConsumerRecord record : records) {
          System.out.println(record.value());
      }
      medium
      A. Compilation error
      B. No output
      C. Hello\nWorld
      D. Runtime exception

      Solution

      1. Step 1: Understand consumer subscription and poll

        The consumer subscribes to "my-topic" and polls messages for 1 second.
      2. Step 2: Process messages in the topic

        Since the topic has two messages "Hello" and "World", the poll will fetch both, and the loop prints each value.
      3. Final Answer:

        Hello\nWorld -> Option C
      4. Quick Check:

        poll() fetches messages = Hello and World printed [OK]
      Hint: poll() fetches messages; loop prints each value [OK]
      Common Mistakes:
      • Assuming poll returns no messages immediately
      • Confusing subscribe with assign
      • Expecting compile or runtime errors without cause
      4. Identify the error in this Kafka consumer code snippet:
      Properties props = new Properties();
      props.put("bootstrap.servers", "localhost:9092");
      props.put("group.id", "group1");
      props.put("key.deserializer", "StringDeserializer");
      props.put("value.deserializer", "StringDeserializer");
      KafkaConsumer consumer = new KafkaConsumer<>(props);
      consumer.subscribe(List.of("topic1"));
      ConsumerRecords records = consumer.poll(Duration.ofMillis(100));
      for (ConsumerRecord record : records) {
          System.out.println(record.value());
      }
      medium
      A. Deserializer class names are incomplete and will cause ClassNotFoundException
      B. Missing call to consumer.close()
      C. Incorrect subscription method used
      D. poll() duration is too short and causes timeout

      Solution

      1. Step 1: Check deserializer configuration

        The deserializer class names must be fully qualified, e.g., "org.apache.kafka.common.serialization.StringDeserializer".
      2. Step 2: Identify impact of incorrect class names

        Using "StringDeserializer" alone will cause ClassNotFoundException at runtime.
      3. Final Answer:

        Deserializer class names are incomplete and will cause ClassNotFoundException -> Option A
      4. Quick Check:

        Deserializer full class name required = Deserializer class names are incomplete and will cause ClassNotFoundException [OK]
      Hint: Use full deserializer class names to avoid errors [OK]
      Common Mistakes:
      • Using short class names for deserializers
      • Ignoring missing consumer.close() (not error here)
      • Assuming poll duration causes errors
      5. You want to process messages from multiple topics and commit offsets manually after processing. Which code snippet correctly sets up the Kafka consumer for this use case?
      hard
      A. props.put("enable.auto.commit", "false"); consumer.subscribe(Arrays.asList("topicA", "topicB")); while (true) { ConsumerRecords records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord record : records) { process(record.value()); } consumer.commitSync(); }
      B. props.put("enable.auto.commit", "true"); consumer.subscribe(Collections.singletonList("topicA")); while (true) { ConsumerRecords records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord record : records) { process(record.value()); } }
      C. props.put("enable.auto.commit", "false"); consumer.assign(Arrays.asList(new TopicPartition("topicA", 0))); consumer.subscribe(Arrays.asList("topicB")); while (true) { ConsumerRecords records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord record : records) { process(record.value()); } consumer.commitAsync(); }
      D. props.put("enable.auto.commit", "false"); consumer.subscribe(Arrays.asList("topicA", "topicB")); while (true) { ConsumerRecords records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord record : records) { process(record.value()); } }

      Solution

      1. Step 1: Disable auto commit for manual offset control

        Setting "enable.auto.commit" to "false" allows manual offset commits.
      2. Step 2: Subscribe to multiple topics correctly

        Use consumer.subscribe(Arrays.asList("topicA", "topicB")) to listen to multiple topics.
      3. Step 3: Commit offsets after processing

        Calling consumer.commitSync() after processing ensures offsets are saved manually.
      4. Final Answer:

        Code snippet with manual commit, multiple topic subscription, and commitSync() -> Option A
      5. Quick Check:

        Manual commit + multiple topics = props.put("enable.auto.commit", "false"); consumer.subscribe(Arrays.asList("topicA", "topicB")); while (true) { ConsumerRecords records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord record : records) { process(record.value()); } consumer.commitSync(); } [OK]
      Hint: Disable auto commit and call commitSync() after processing [OK]
      Common Mistakes:
      • Using auto commit when manual commit is needed
      • Mixing assign() and subscribe() incorrectly
      • Forgetting to commit offsets after processing
      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