You need to enable JavaScript to run this app. Spring Boot集成Spring Cloud Stream Kafka出现setAckOnError方法不存在报错
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Spring Cloud Stream Kafka出现setAckOnError方法不存在报错

问题原因

该错误是典型的Spring官方组件版本不兼容导致的NoSuchMethodError类异常:

  • 你使用的Spring Cloud 2020.0.3-SNAPSHOT版本对应的Spring Cloud Stream Kafka Binder,底层依赖spring-kafka 2.6.x版本,该版本的org.springframework.kafka.listener.ContainerProperties类中存在setAckOnError方法
  • Spring Boot 2.5.0默认管理的spring-kafka版本为2.7.x,该版本重构了错误处理逻辑,直接移除了setAckOnError方法
  • 应用启动时类加载器优先加载了Spring Boot管理的高版本spring-kafka,Kafka Binder调用已被删除的方法时就会抛出该异常

解决方案

提供两种经过验证的可行方案,选择任意一种即可:

方案1:降级Spring Boot版本(最稳妥)

Spring Cloud 2020.0.x(代号Ilford)官方适配的Spring Boot版本为2.4.x,直接将pom.xml中parent的版本修改为2.4.x系列最新稳定版即可,无需修改其他配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.13</version>
    <relativePath/>
</parent>

方案2:手动指定兼容的spring-kafka版本(保留Spring Boot 2.5.x)

如果必须使用Spring Boot 2.5.x版本,可以在pom.xml的properties节点中手动指定spring-kafka的兼容版本,覆盖Spring Boot默认的版本管理规则:

<properties>
    <java.version>11</java.version>
    <spring-cloud.version>2020.0.3-SNAPSHOT</spring-cloud.version>
    <!-- 新增以下配置,指定spring-kafka版本为2.6.x系列最新稳定版 -->
    <spring-kafka.version>2.6.11</spring-kafka.version>
</properties>

额外优化建议

你当前pom.xml中单独引入了spring-kafka依赖,该依赖会由spring-cloud-stream-binder-kafka自动传递引入,可以直接删除该显式依赖,减少版本冲突概率。

修改完成后可执行mvn dependency:tree命令查看spring-kafka的实际引入版本,确认是2.6.x系列即为修复成功。


内容的提问来源于stack exchange,提问作者Amir Choubani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 14:45:09