0
0
Kafkadevops~20 mins

Serialization (String, JSON, Avro) in Kafka - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Kafka Serialization Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this Kafka producer code snippet using String serialization?

Consider this Kafka producer code snippet that sends a message with String serialization for both key and value:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("test-topic", "key1", "value1"));
producer.close();
System.out.println("Message sent");

What will this code print when run successfully?

Kafka
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("test-topic", "key1", "value1"));
producer.close();
System.out.println("Message sent");
AException in thread "main" java.lang.ClassNotFoundException: org.apache.kafka.common.serialization.StringSerializer
BMessage sent
Cnull
Dvalue1
Attempts:
2 left
💡 Hint

Think about what the System.out.println line outputs after sending the message.

Predict Output
intermediate
2:00remaining
What is the output of this Kafka consumer code snippet using JSON deserialization?

Given this Kafka consumer code snippet that uses JSON deserialization for values:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "group1");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.connect.json.JsonDeserializer");

KafkaConsumer<String, Map<String, Object>> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("json-topic"));
ConsumerRecords<String, Map<String, Object>> records = consumer.poll(Duration.ofMillis(1000));
for (ConsumerRecord<String, Map<String, Object>> record : records) {
    System.out.println(record.value().get("name"));
}
consumer.close();

If the topic has one message with value {"name":"Alice","age":30}, what will be printed?

Kafka
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "group1");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.connect.json.JsonDeserializer");

KafkaConsumer<String, Map<String, Object>> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("json-topic"));
ConsumerRecords<String, Map<String, Object>> records = consumer.poll(Duration.ofMillis(1000));
for (ConsumerRecord<String, Map<String, Object>> record : records) {
    System.out.println(record.value().get("name"));
}
consumer.close();
Anull
B{"name":"Alice","age":30}
CAlice
D30
Attempts:
2 left
💡 Hint

Look at what key is accessed from the deserialized JSON map.

Predict Output
advanced
2:00remaining
What error does this Kafka producer code raise when using Avro serialization without schema registry?

Consider this Kafka producer code snippet that tries to send an Avro serialized message without configuring schema registry:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer");

Producer<String, GenericRecord> producer = new KafkaProducer<>(props);
GenericRecord record = new GenericData.Record(schema);
record.put("field", "value");
producer.send(new ProducerRecord<>("avro-topic", "key1", record));
producer.close();

What error will this code most likely raise?

Kafka
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer");

Producer<String, GenericRecord> producer = new KafkaProducer<>(props);
GenericRecord record = new GenericData.Record(schema);
record.put("field", "value");
producer.send(new ProducerRecord<>("avro-topic", "key1", record));
producer.close();
Aio.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: HTTP 404 Not Found
BNo error, message sent successfully
CClassNotFoundException: io.confluent.kafka.serializers.KafkaAvroSerializer
DNullPointerException
Attempts:
2 left
💡 Hint

Think about what happens if the schema registry URL is not set but Avro serializer is used.

🧠 Conceptual
advanced
1:30remaining
Which serialization format is best suited for schema evolution in Kafka?

In Kafka, you want to choose a serialization format that supports schema evolution, allowing you to add or remove fields without breaking consumers. Which format is best suited for this?

APlain byte array serialization
BJSON serialization
CString serialization
DAvro serialization with schema registry
Attempts:
2 left
💡 Hint

Consider which format uses a schema registry to manage schemas and compatibility.

Predict Output
expert
2:30remaining
What is the number of items in the resulting Map after this JSON deserialization in Kafka consumer?

Given this Kafka consumer code snippet using JSON deserialization:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "group1");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.connect.json.JsonDeserializer");

KafkaConsumer<String, Map<String, Object>> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("json-topic"));
ConsumerRecords<String, Map<String, Object>> records = consumer.poll(Duration.ofMillis(1000));
for (ConsumerRecord<String, Map<String, Object>> record : records) {
    Map<String, Object> valueMap = record.value();
    System.out.println(valueMap.size());
}
consumer.close();

If the topic has a message with JSON value {"name":"Bob","age":25,"city":"NY"}, what will be printed?

Kafka
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "group1");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.connect.json.JsonDeserializer");

KafkaConsumer<String, Map<String, Object>> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("json-topic"));
ConsumerRecords<String, Map<String, Object>> records = consumer.poll(Duration.ofMillis(1000));
for (ConsumerRecord<String, Map<String, Object>> record : records) {
    Map<String, Object> valueMap = record.value();
    System.out.println(valueMap.size());
}
consumer.close();
A3
B1
C0
DThrows NullPointerException
Attempts:
2 left
💡 Hint

Count the number of keys in the JSON object after deserialization.