0
0
SpringbootHow-ToBeginner · 4 min read

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-servers causes connection failure.
  • Missing or wrong serializers/deserializers leads to message errors.
  • Forgetting @EnableKafka annotation disables listener processing.
  • Using different groupId for 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

ConceptDescription
KafkaTemplateSend messages to Kafka topics
@KafkaListenerReceive messages from topics
bootstrap-serversKafka server address
key/value serializerConvert data to bytes for Kafka
groupIdConsumer 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.