springboot+kafka简单实战
以下是基于搜索结果整理的 Spring Boot 集成 Kafka 的实战指南,涵盖从环境搭建到代码实现的完整流程:
1. 环境搭建
1.1 添加依赖
在 pom.xml
文件中添加 Spring Kafka 的依赖:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
1.2 配置 Kafka
在 application.properties
或 application.yml
文件中配置 Kafka 的相关参数:
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: test-consumer-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
demo:
kafka:
consumer:
topic: hello-world
status: true
group-id: test-consumer-group
2. 生产者实现
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 创建kafka生产者
*/
@Component
public class KafkaProducer {
@Resource
private KafkaTemplate<String, String> kafkaTemplate;
/**
* 发送消息至指定主题
* @param topic 主题名称
* @param key 消息键
* @param value 消息值
*/
public void sendMessage(String topic, String key, String value) {
kafkaTemplate.send(topic, key, value);
}
}
3. 消费者实现
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
/**
* 创建kafka消费者
*/
@Slf4j
@Component
@ConditionalOnProperty(name = "demo.kafka.consumer.status", havingValue = "true",matchIfMissing = false)//用于根据配置属性的存在和值来决定是否加载某个Bean或类
public class KafkaConsumer {
/**
* 监听指定主题
* @param message 消息内容
*/
@KafkaListener(topics = "${demo.kafka.consumer.topic:hello}", groupId = "${demo.kafka.consumer.group:test-consumer-group-1}")
public void listen(String message) {
log.info("Received message: " + message);
}
}
4. 测试
import com.example.springbootkafka.producer.KafkaProducer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/kafka")
public class KafkaController {
@Resource
private KafkaProducer producer;
@Value("${demo.kafka.consumer.topic:hello}")
private String TOPIC;
@GetMapping("/send")
public String sendMessage(@RequestParam String message) {
producer.sendMessage(TOPIC, "key", message);
return "Message sent!";
}
}
5. 实际应用场景
5.1 日志收集
将应用程序的日志发送到 Kafka,再由其他服务消费并存储到数据库或搜索引擎中。
5.2 事件驱动架构
通过 Kafka 实现微服务之间的异步通信,解耦服务间的依赖。
5.3 实时数据处理
结合流处理框架(如 Kafka Streams 或 Flink)实现实时数据分析。
总结
通过以上步骤,你可以在 Spring Boot 项目中快速集成 Kafka,实现消息的生产与消费功能。Kafka 的异步通信机制能够有效提升系统的性能和可靠性,适用于多种实际应用场景,如日志收集、事件驱动架构和实时数据处理。