Spring Boot是否支持无ZooKeeper的Kafka?Kraft模式集成配置咨询
Spring Boot 集成 Kafka Kraft 模式(无 ZooKeeper)
支持情况说明
Spring Boot 完全支持连接无 ZooKeeper 的 Kafka Kraft 模式,前提是使用的 Spring Kafka 版本与 Kafka Kraft 版本兼容:
- Spring Boot 2.6.x 及以上版本(对应 Spring Kafka 2.8.x+)正式支持 Kafka Kraft 模式,因为 Kafka 从 2.8.0 开始将 Kraft 从预览状态转为可用。
- 建议保持 Spring Kafka 版本与你的 Kafka Kraft 集群版本主版本一致(比如 Kafka 3.5.x 搭配 Spring Kafka 2.9.x+),避免兼容性问题。
核心配置步骤
1. 确保依赖版本正确
如果使用 Maven,在 pom.xml 中引入 Spring Kafka Starter(Spring Boot 会自动管理兼容版本):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-kafka</artifactId> </dependency>
如果是 Gradle:
implementation 'org.springframework.boot:spring-boot-starter-kafka'
2. 配置 application.yml / application.properties
关键是不需要配置任何 ZooKeeper 相关参数,只需指定 Kafka Kraft 集群的 bootstrap-servers(指向 Kraft 的控制器节点或 broker 节点,Kraft 中控制器和 broker 可以是同一节点)。
application.yml 示例:
spring: kafka: bootstrap-servers: kafka-node1:9092,kafka-node2:9092,kafka-node3:9092 # 替换为你的Kraft集群地址 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: my-kraft-consumer-group key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-deserializer: org.apache.kafka.common.serialization.StringDeserializer auto-offset-reset: earliest
application.properties 示例:
spring.kafka.bootstrap-servers=kafka-node1:9092,kafka-node2:9092,kafka-node3:9092 spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.consumer.group-id=my-kraft-consumer-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.consumer.auto-offset-reset=earliest
3. 编写生产者/消费者代码
和传统 Kafka 集成的代码完全一致,因为 Spring Kafka 对上层屏蔽了底层是 ZooKeeper 还是 Kraft 的差异。
生产者示例:
import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Component; @Component public class KraftKafkaProducer { private final KafkaTemplate<String, String> kafkaTemplate; public KraftKafkaProducer(KafkaTemplate<String, String> kafkaTemplate) { this.kafkaTemplate = kafkaTemplate; } public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } }
消费者示例:
import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component public class KraftKafkaConsumer { @KafkaListener(topics = "test-kraft-topic", groupId = "my-kraft-consumer-group") public void consume(String message) { System.out.println("Received message from Kafka Kraft: " + message); } }
注意事项
- 确认 Kafka Kraft 集群的
bootstrap-servers地址正确,且端口(默认9092)对外开放,Spring Boot 应用能正常访问。 - 如果你的 Kafka Kraft 集群开启了 SASL 认证或 SSL 加密,只需在 Spring Kafka 配置中添加对应的认证参数即可,和传统 Kafka 配置方式一致。
- 若遇到版本兼容性问题,可手动指定 Spring Kafka 版本,确保与 Kafka Kraft 集群版本匹配。
内容的提问来源于stack exchange,提问作者bharathi
相关产品推荐
相关产品推荐

