Kstackr
Kstackr

Reputation: 47

Kafka deserializers based on Topics

I have two Kafka topics in my consumer application. How can I configure one topic to use StringDeserializer (org.apache.kafka.common.serialization.StringDeserializer) and other one to use KafkaAvroDeserializer (io.confluent.kafka.serializers.KafkaAvroDeserializer)?

Upvotes: 1

Views: 566

Answers (2)

Kstackr
Kstackr

Reputation: 47

There is an easy approach for this. Assume we have topic A and topic B where A needs to use KafkaAvroDeserializer while B needs to use StringDeserializer. Utilize properties of @KafkaListner to set the required values.

@KafkaListener(
topics = "topicA",
properties = {
    "key.deserializer=io.confluent.kafka.serializers.KafkaAvroDeserializer",
    "value.deserializer=io.confluent.kafka.serializers.KafkaAvroDeserializer"
})
public void consumeTopicA() {}

@KafkaListener(
topics = "topicB",
properties = {
    "key.deserializer=org.apache.kafka.common.serialization.StringDeserializer",
    "value.deserializer=org.apache.kafka.common.serialization.StringDeserializer"
})
public void consumeTopicB() {}

Upvotes: 0

Gary Russell
Gary Russell

Reputation: 174729

Use the DelegatingByTopicDeserializer.

https://docs.spring.io/spring-kafka/docs/current/reference/html/#by-topic

Starting with version 2.8, the DelegatingByTopicSerializer and DelegatingByTopicDeserializer allow selection of a serializer/deserializer based on the topic name. Regex Patterns are used to lookup the instance to use.

Upvotes: 1

Related Questions