1. Prerequisites
- Java 17+ installed
- Spring Boot 3.x
- Kafka running locally or via Docker
If you want a quick Kafka setup using Docker:
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.8
docker run -d --name kafka -p 9092:9092 --env KAFKA_ZOOKEEPER_CONNECT=host.docker.internal:2181 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 bitnami/kafka:latest
2. Create Spring Boot Project
Use Spring Initializr:
- Dependencies: Spring Web, Spring for Apache Kafka
3. Add Kafka Dependencies (if not already)
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
4. Configure Kafka in application.yml
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
5. Create Kafka Producer
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
@Service
public class KafkaProducer {
private final KafkaTemplate<String, String> kafkaTemplate;
public KafkaProducer(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendMessage(String topic, String message) {
kafkaTemplate.send(topic, message);
System.out.println("Sent: " + message);
}
}
6. Create Kafka Consumer
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;
@Service
public class KafkaConsumer {
@KafkaListener(topics = "test-topic", groupId = "my-group")
public void listen(String message) {
System.out.println("Received: " + message);
}
}
7. Create a REST Controller to Send Messages
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/kafka")
public class KafkaController {
private final KafkaProducer producer;
public KafkaController(KafkaProducer producer) {
this.producer = producer;
}
@PostMapping("/publish")
public String sendMessage(@RequestParam String message) {
producer.sendMessage("test-topic", message);
return "Message sent to Kafka: " + message;
}
}
8. Run the Application
- Start Spring Boot app.
- Send a POST request:
curl -X POST "http://localhost:8080/kafka/publish?message=HelloKafka"
You should see:
Sent: HelloKafka
Received: HelloKafka
✅ What this example demonstrates:
- A Spring Boot Kafka producer sends messages to a topic.
- A Spring Boot Kafka consumer listens to the topic and prints messages.
- REST API triggers Kafka message production.