I am planning to use the Spring Kafka client to consume and produce messages from a kafka setup in a Spring Boot application. I see support for custom headers in Kafka 0.11 as detailed here. While it is available for native Kafka producers and consumers, I don't see support for adding/reading custom headers in Spring Kafka.
I am trying to implement a DLQ for messages based on a retry count that I was hoping to store in the message header without having to parse the payload.
Well, Spring Kafka provides headers support since version 2.0: https://docs.spring.io/spring-kafka/docs/2.1.2.RELEASE/reference/html/_reference.html#headers
You can have that KafkaHeaderMapper
instance and use it to populated headers to the Message
before sending it via KafkaTemplate.send(Message<?> message)
. Or you can use the plain KafkaTemplate.send(ProducerRecord<K, V> record)
.
When you receive records using KafkaMessageListenerContainer
, the KafkaHeaderMapper
can be supplied there via a MessagingMessageConverter
injected to the RecordMessagingMessageListenerAdapter
.
So, any custom headers can be transferred either way.