Apache Kafka with Spring Boot

🛰️ What is Apache Kafka?

Kafka is a high-performance, distributed messaging system used for real-time data streaming.

It works like a distributed queue, but is faster, scalable, and durable — used by giants like LinkedIn, Netflix, and Uber.


✅ Why Use Kafka Instead of JMS?

Feature Kafka JMS (e.g., ActiveMQ)
Performance Very High (millions/sec) Moderate
Scalability Horizontally scalable Limited
Storage Persistent by default Mostly in-memory (configurable)
Use Case Event streaming & microservices Traditional enterprise messaging

🚀 Spring Boot + Kafka Example (Producer & Consumer)

🔗 Step 1: Add Kafka Dependency

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
</dependency>

⚙️ Step 2: Configuration (application.properties)

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest
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

📤 Step 3: Kafka Producer (Send Message)

@Service
public class KafkaProducer {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
        System.out.println("Message sent: " + message);
    }
}

 


📥 Step 4: Kafka Consumer (Receive Message)

@Component
public class KafkaConsumer {

    @KafkaListener(topics = "test-topic", groupId = "my-group")
    public void listen(String message) {
        System.out.println("Received message: " + message);
    }
}

 


🧪 Step 5: Test Controller

@RestController
public class KafkaController {

    @Autowired
    private KafkaProducer producer;

    @GetMapping("/send")
    public String sendMessage() {
        producer.sendMessage("test-topic", "Hello from Spring Kafka!");
        return "Message sent!";
    }
}

 


📦 Output Example:

  • Call: http://localhost:8080/send

  • Console:

    Message sent: Hello from Spring Kafka!
    Received message: Hello from Spring Kafka!

✅ Summary

Component Annotation / Class
Producer KafkaTemplate.send()
Consumer @KafkaListener
Broker Apache Kafka
Topic Named pipe between services
Back to blog

Leave a comment