Reputation: 47
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
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
Reputation: 174729
Use the DelegatingByTopicDeserializer
.
https://docs.spring.io/spring-kafka/docs/current/reference/html/#by-topic
Starting with version 2.8, the
DelegatingByTopicSerializer
andDelegatingByTopicDeserializer
allow selection of a serializer/deserializer based on the topic name. RegexPattern
s are used to lookup the instance to use.
Upvotes: 1