Kafka integration lets your Spring Boot app send and receive messages easily. It helps different parts of your system talk to each other without waiting.
Kafka integration basics in Spring Boot
spring.kafka.bootstrap-servers=localhost:9092 @Bean public NewTopic topic() { return TopicBuilder.name("myTopic").build(); } @KafkaListener(topics = "myTopic") public void listen(String message) { System.out.println("Received: " + message); } @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String msg) { kafkaTemplate.send("myTopic", msg); }
Use spring.kafka.bootstrap-servers to set Kafka server address.
@KafkaListener marks a method to receive messages from a topic.
@KafkaListener(topics = "orders") public void receiveOrder(String order) { System.out.println("Order received: " + order); }
kafkaTemplate.send("notifications", "Hello World!");
@Bean
public NewTopic createTopic() {
return TopicBuilder.name("events").partitions(3).replicas(1).build();
}This Spring Boot app creates a Kafka topic named 'demoTopic'. It sends messages to this topic and listens for messages from it. When a message arrives, it prints it to the console.
package com.example.kafkademo; import org.apache.kafka.clients.admin.NewTopic; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.annotation.EnableKafka; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.beans.factory.annotation.Autowired; @EnableKafka @SpringBootApplication public class KafkaDemoApplication { public static void main(String[] args) { SpringApplication.run(KafkaDemoApplication.class, args); } @Bean public NewTopic demoTopic() { return org.springframework.kafka.config.TopicBuilder.name("demoTopic").build(); } @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String message) { kafkaTemplate.send("demoTopic", message); } @KafkaListener(topics = "demoTopic") public void listen(String message) { System.out.println("Received message: " + message); } }
Make sure Kafka server is running on the address you set in bootstrap-servers.
Use @KafkaListener only on methods inside Spring-managed beans.
Sending and receiving messages happen asynchronously, so messages may arrive shortly after sending.
Kafka integration in Spring Boot helps apps send and receive messages easily.
Use @KafkaListener to listen to topics and KafkaTemplate to send messages.
Define topics with NewTopic beans to manage Kafka topics from your app.
Practice
@KafkaListener in a Spring Boot application?Solution
Step 1: Understand the role of
This annotation marks a method to receive messages from a Kafka topic automatically.@KafkaListenerStep 2: Differentiate sending and listening
Sending messages is done withKafkaTemplate, not@KafkaListener.Final Answer:
To listen and consume messages from a Kafka topic -> Option AQuick Check:
@KafkaListenerlistens to topics [OK]
- Confusing @KafkaListener with KafkaTemplate
- Thinking @KafkaListener creates topics
- Assuming it configures Kafka brokers
Solution
Step 1: Identify the sending method in Spring Boot
Spring Boot usesKafkaTemplatewith thesend()method to send messages.Step 2: Check syntax correctness
kafkaTemplate.send("topicName", "message")is the correct syntax to send a message.Final Answer:
kafkaTemplate.send("topicName", "message") -> Option DQuick Check:
Sending uses KafkaTemplate.send() [OK]
- Using @KafkaListener to send messages
- Calling listen() instead of send()
- Instantiating KafkaProducer manually in Spring Boot
@KafkaListener(topics = "myTopic")
public void listen(String message) {
System.out.println("Received: " + message);
}What will be printed if a message "Hello Kafka" is sent to
myTopic?Solution
Step 1: Analyze the listener method output
The method prints "Received: " concatenated with the message string.Step 2: Substitute the message value
Message is "Hello Kafka", so output is "Received: Hello Kafka".Final Answer:
Received: Hello Kafka -> Option AQuick Check:
Prints "Received: " + message [OK]
- Ignoring the prefix in the print statement
- Assuming only the message prints
- Confusing topic name with output
@Bean
public NewTopic topic() {
return new NewTopic("testTopic", 1, (short) 1);
}What is the likely error if the application fails to create the topic?
Solution
Step 1: Understand NewTopic bean usage
NewTopic defines topic name, partitions, and replication factor correctly here.Step 2: Identify common cause for topic creation failure
Failure usually happens if Kafka broker connection settings are missing or incorrect.Final Answer:
Missing Kafka broker connection settings -> Option BQuick Check:
Broker settings needed for topic creation [OK]
- Thinking @KafkaListener is needed on NewTopic bean
- Assuming topic name format is invalid
- Miscounting NewTopic constructor parameters
topicA and topicB. Which of the following @KafkaListener annotations correctly achieves this?Solution
Step 1: Recall correct syntax for multiple topics
Spring Boot expects an array of strings for multiple topics:topics = {"topicA", "topicB"}.Step 2: Evaluate other options
@KafkaListener(topic = "topicA,topicB") uses wrong attribute name and comma string, C uses string with comma but not array, D uses invalid syntax with square brackets.Final Answer:
@KafkaListener(topics = {"topicA", "topicB"}) -> Option CQuick Check:
Multiple topics require array syntax [OK]
- Using comma-separated string instead of array
- Wrong attribute name 'topic' instead of 'topics'
- Using square brackets instead of curly braces
Ready to prove it?
Pass the test and this pattern moves unknown
