Skip to content
Kafka Is FunProgress

SpringSpring Kafka Advanced

How do you use Kafka headers in Spring Kafka?

Reference answer

Producer: kafkaTemplate.send(MessageBuilder.withPayload(value).setHeader('traceId', traceId).setHeader(KafkaHeaders.TOPIC, 'my-topic').build()). Consumer: @KafkaListener method can receive @Header('traceId') String traceId as a parameter, or ConsumerRecord<K,V> which has record.headers(). Headers are Iterable<Header> where each Header has key (String) and value (byte[]). Use them for: distributed tracing (pass trace IDs), routing (DLT knows the original topic), schema version, retry count, timestamps. Spring Kafka automatically preserves headers across retry topics.

Expected key concepts: MessageBuilder, setHeader, KafkaHeaders.TOPIC, @Header, ConsumerRecord, record.headers, byte[], traceId, routing, distributed tracing, retry topics