spring boot集成kafka需三步:引入spring-kafka依赖;在application.yml中配置bootstrap-servers、acks: all、retries、enable.idempotence及消费者手动提交offset;使用kafkatemplate发送和@kafkalistener接收消息,并推荐json传输与kafdrop可观测。

Spring Boot 集成 Kafka 并不复杂,关键是把依赖、配置、生产和消费逻辑三块串起来,再根据业务需要调好可靠性参数。
加对依赖
在 `pom.xml` 中引入 Spring 官方维护的 `spring-kafka`:<dependency><groupid>org.springframework.kafka</groupid><artifactid>spring-kafka</artifactid></dependency>
不需要额外引入 Kafka 客户端(如 kafka-clients),它会被自动拉取。Spring Boot 2.2+ 默认兼容 Kafka 2.3+,生产环境建议用 Kafka 3.0+(支持 KRaft 模式,免 ZooKeeper)。
配好基础连接与行为
在 `application.yml` 中写明 broker 地址和核心参数:spring:
kafka:
bootstrap-servers: localhost:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
acks: all
retries: 3
enable.idempotence: true
batch-size: 16384
linger-ms: 5
consumer:
group-id: my-app-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
enable-auto-commit: false
注意几个关键点:
-
acks: all+retries > 0+enable.idempotence: true是保障不丢消息的基础组合; -
auto-offset-reset: earliest表示首次启动时从头消费,适合调试;线上建议按需设为latest; -
enable-auto-commit: false推荐关闭,改用手动提交或@KafkaListener的AckMode.MANUAL_IMMEDIATE控制偏移量,避免重复消费。
写生产者和消费者
不用手写 KafkaProducer/KafkaConsumer 实例,Spring Boot 自动配置好了 `KafkaTemplate` 和监听机制。-
发消息直接注入
KafkaTemplate<string string></string>:
@Autowired
private KafkaTemplate<string string> kafkaTemplate;
public void send(String topic, String key, String value) {
kafkaTemplate.send(topic, key, value);
}</string>
-
收消息用
@KafkaListener注解方法即可:
@KafkaListener(topics = "user-event", groupId = "my-app-group")
public void listen(String message, Acknowledgment ack) {
try {
// 处理业务逻辑
process(message);
ack.acknowledge(); // 手动提交 offset
} catch (Exception e) {
// 异常处理,可重试或进死信队列
}
}
如果消息体是对象(比如 User),记得配好自定义序列化器,或统一用 JSON 字符串传输,更轻量稳定。
验证与可观测性
集成后别急着上线,先做三件事: - 用 `kafka-console-producer.sh` 和 `kafka-console-consumer.sh` 手动收发,确认网络和 Topic 可达; - 查看消费者组状态:`kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-app-group --describe`; - 加个简单的健康检查端点,暴露 `KafkaAdmin` 或 `KafkaTemplate` 是否可用。Kafka 本身没有内置 UI,但可以顺手搭一个 kafdrop(轻量 Web 界面)或 akhq,方便查 Topic、分区、消费延迟、积压量。
不复杂但容易忽略。











