test-topicDeserialization in Kafka - Mini Project: Build & Apply
KafkaConsumer from kafka and create a consumer called consumer that connects to localhost:9092 and subscribes to the topic 'test-topic'.Use KafkaConsumer('test-topic', bootstrap_servers=['localhost:9092']) to create the consumer.
json module and add a variable called decode_utf8 that decodes bytes to UTF-8 strings. This will help convert message values from bytes to strings before deserialization.Define a function decode_utf8 that takes data and returns data.decode('utf-8').
for loop with variable message to iterate over consumer. Inside the loop, decode the message value using decode_utf8 and then deserialize it using json.loads into a variable called data.Use for message in consumer: and inside decode with decode_utf8(message.value) then deserialize with json.loads.
for loop, add a print statement to display the data dictionary.Use print(data) inside the loop to show the dictionary.
Practice
What is the main purpose of deserialization in Kafka consumers?
Solution
Step 1: Understand Kafka message flow
Kafka stores messages as raw bytes in topics.Step 2: Role of deserialization in consumers
Deserialization converts these raw bytes back into readable data for the consumer application.Final Answer:
To convert raw bytes from Kafka into usable data formats -> Option CQuick Check:
Deserialization = Convert bytes to data [OK]
- Confusing deserialization with serialization
- Thinking deserialization sends data
- Assuming deserialization compresses data
Which of the following is the correct way to specify a String deserializer in a Kafka consumer configuration?
props.put("key.deserializer", ?);Solution
Step 1: Identify deserializer for String keys
The correct class for String deserialization is StringDeserializer.Step 2: Check option correctness
"org.apache.kafka.common.serialization.StringDeserializer" uses StringDeserializer, which matches the key.deserializer property.Final Answer:
"org.apache.kafka.common.serialization.StringDeserializer" -> Option AQuick Check:
String deserializer = StringDeserializer [OK]
- Using Serializer instead of Deserializer
- Mixing IntegerSerializer with deserializer property
- Choosing ByteArrayDeserializer for String data
Given the following Kafka consumer code snippet, what will be the output if the message value is a JSON string but the deserializer is set to StringDeserializer?
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
ConsumerRecord<String, String> record = consumer.poll(Duration.ofMillis(100)).iterator().next();
System.out.println(record.value());Solution
Step 1: Understand StringDeserializer behavior
StringDeserializer converts bytes to a UTF-8 string without parsing JSON.Step 2: Output of printing record.value()
The JSON string is printed as plain text exactly as received.Final Answer:
The JSON string as plain text -> Option BQuick Check:
StringDeserializer outputs raw string [OK]
- Expecting automatic JSON parsing
- Thinking deserialization fails on JSON strings
- Assuming binary garbage output
What is the likely cause of this error in a Kafka consumer?
org.apache.kafka.common.errors.SerializationException: Error deserializing key/value for partition
Given the consumer uses
IntegerDeserializer but the producer sends String keys.Solution
Step 1: Analyze deserialization error cause
The error occurs when deserializer cannot convert bytes to expected type.Step 2: Check key type mismatch
Producer sends String keys, but consumer expects Integer keys, causing failure.Final Answer:
Mismatch between producer's String keys and consumer's IntegerDeserializer -> Option AQuick Check:
Deserializer mismatch = SerializationException [OK]
- Ignoring type mismatch between producer and consumer
- Blaming unrelated network or topic errors
- Confusing serialization with deserialization errors
You want to consume messages where the value is a JSON object representing a user with fields id (int) and name (string). Which deserialization approach is best to convert the Kafka message value into a User Java object?
Solution
Step 1: Understand data format and target type
The message value is JSON, and we want a User Java object.Step 2: Choose deserialization method
A custom deserializer can parse JSON and create User instances directly.Step 3: Evaluate other options
StringDeserializer returns raw JSON string, casting won't convert to User. IntegerDeserializer is wrong type. ByteArrayDeserializer requires manual parsing.Final Answer:
Use a custom deserializer that parses JSON into a User object -> Option DQuick Check:
Custom deserializer = JSON to object [OK]
- Casting String to object without parsing
- Using wrong deserializer type
- Manually parsing bytes instead of using deserializer
Ready to prove it?
Pass the test and this pattern moves unknown
