spring boot集成kafka核心是依赖spring-kafka自动配置,通过kafkatemplate发送消息、@kafkalistener监听消费,配合application.yml中acks:all、group-id、序列化器等配置实现可靠消息收发。

在 Spring Boot 中集成 Kafka 实现消息生产和消费,核心是依赖 spring-kafka 提供的自动配置能力,配合少量配置和注解即可快速上手。不需要手写原生 Kafka 客户端,也不用管理线程、连接池或 offset 提交逻辑——这些都由 Spring 封装好了。
基础依赖与环境准备
确保项目已引入 spring-kafka 依赖(Spring Boot 3.x 推荐使用 3.3.x+ 版本,对应 Kafka 3.7/3.8):
- Spring Boot 3.3.5 + JDK 17 或 21
- Kafka 服务已启动(本地可用 Docker Compose 快速拉起单节点 KRaft 模式集群)
-
bootstrap-servers地址能被应用访问(如localhost:9092)
application.yml 配置要点
这是最关键的一步,配置直接影响可靠性与行为表现:
-
生产者:设置
acks: all(确保写入所有副本)、retries: 3、enable.idempotence: true(开启幂等性防重发) -
消费者:指定
group-id,设置auto-offset-reset: earliest(首次消费从头开始)或latest(只消费新消息) - 序列化器统一用
StringSerializer/StringDeserializer;若传对象,需自定义JsonSerializer并配value-serializer
编写生产者:用 KafkaTemplate 发送
直接注入 KafkaTemplate<string string></string> 即可发送字符串消息:
- 同步发送:
kafkaTemplate.send("topic-name", "key", "value").get()(会阻塞等待响应) - 异步发送:
kafkaTemplate.send("topic-name", "key", "value")返回ListenableFuture,可添加回调处理成功/失败 - 批量发送:构造
ProducerRecord列表,调用sendBatch()(需注意batch-size和linger.ms配置)
编写消费者:用 @KafkaListener 监听
最简方式是在方法上加注解:
-
@KafkaListener(topics = "my-topic", groupId = "my-group")—— 自动订阅并拉取消息 - 参数可直接接收
String、byte[],或反序列化后的对象(需配好JsonDeserializer) - 如需手动控制 offset 提交,把
enable-auto-commit设为false,并在方法中注入Acknowledgment调用ack.acknowledge()
进阶注意事项
上线前建议确认几件事:
- Topic 是否已存在?未创建时可设
spring.kafka.producer.properties.allow.auto.create.topics=true(仅开发环境) - 消费者是否分配到分区?可通过日志查看
Assigned partitions,或用kafka-topics.sh --describe查看分配状态 - 重复消费问题:靠业务幂等(如唯一键去重)或 Kafka 端幂等+事务(较重,按需启用)
- 顺序性保障:Kafka 只保证单个分区内的消息有序,如需全局有序,只能用 1 个分区(牺牲吞吐)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











