How to Use Spring Kafka: Simple Guide with Example
To use
Spring Kafka, add the spring-kafka dependency, configure a KafkaTemplate for sending messages, and create a @KafkaListener method to consume messages. Spring Kafka handles connection and serialization, making it easy to integrate Kafka messaging in your Spring app.Syntax
Spring Kafka uses these main parts:
KafkaTemplate<K, V>: Sends messages to Kafka topics.@KafkaListener: Marks a method to receive messages from a topic.- Configuration properties: Set Kafka server address and serializers.
This setup lets you produce and consume messages simply.
properties and java
spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer // Sending messages @Autowired private KafkaTemplate<String, String> kafkaTemplate; kafkaTemplate.send("my-topic", "Hello Kafka"); // Receiving messages @KafkaListener(topics = "my-topic", groupId = "my-group") public void listen(String message) { System.out.println("Received: " + message); }
Example
This example shows a Spring Boot app that sends a message to Kafka and listens for it.
java
package com.example.kafka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication public class KafkaDemoApplication { public static void main(String[] args) { SpringApplication.run(KafkaDemoApplication.class, args); } } @RestController class KafkaController { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @GetMapping("/send") public String sendMessage() { kafkaTemplate.send("test-topic", "Hello from Spring Kafka!"); return "Message sent"; } @KafkaListener(topics = "test-topic", groupId = "group_id") public void listen(String message) { System.out.println("Received message: " + message); } }
Output
Received message: Hello from Spring Kafka!
Common Pitfalls
- Not setting the correct
bootstrap-serverscauses connection failure. - Missing or wrong serializers/deserializers leads to message errors.
- Forgetting
@EnableKafkaannotation disables listener processing. - Using different
groupIdfor consumers can cause unexpected behavior.
Always check your Kafka server is running and your topic exists.
java
/* Wrong: Missing @EnableKafka disables listeners */ //@EnableKafka @SpringBootApplication public class App {} /* Right: Add @EnableKafka to enable listeners */ @EnableKafka @SpringBootApplication public class App {}
Quick Reference
| Concept | Description |
|---|---|
| KafkaTemplate | Send messages to Kafka topics |
| @KafkaListener | Receive messages from topics |
| bootstrap-servers | Kafka server address |
| key/value serializer | Convert data to bytes for Kafka |
| groupId | Consumer group identifier |
Key Takeaways
Add spring-kafka dependency and configure bootstrap servers to connect to Kafka.
Use KafkaTemplate to send messages and @KafkaListener to receive them.
Always set correct serializers and deserializers for your message types.
Enable listener processing with @EnableKafka annotation.
Check Kafka server and topic availability before running your app.