You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Kafka 2.7.8版本setAckOnError方法废弃后等效配置方案问询

Spring Kafka 2.7.8 版本setAckOnError(false)废弃替代方案

Spring Kafka从2.3版本开始标记setAckOnError()方法为废弃,2.7版本正式移除该方法,官方调整了错误场景下的offset提交逻辑,用统一的配置项和容器属性替代了原有的方法调用,你可以通过以下两种方式实现错误场景下不自动确认的效果:

方案1:配置文件直接设置(入门首选,无需修改业务代码)

如果你的项目使用Spring Boot自动装配Kafka配置,直接在application.yml或者application.properties中添加对应配置即可,效果和原setAckOnError(false)完全一致:

  • application.yml配置示例:
spring:
  kafka:
    listener:
      # 错误场景下不自动提交offset
      ack-on-error: false
      # 可保留你原来的ack-mode配置,手动模式MANUAL/MANUAL_IMMEDIATE、自动模式RECORD/BATCH都兼容
      ack-mode: MANUAL_IMMEDIATE
  • application.properties配置示例:
spring.kafka.listener.ack-on-error=false

方案2:自定义容器工厂时设置

如果你是自行定义ConcurrentKafkaListenerContainerFactory实例,直接通过容器属性设置即可,代码示例如下:

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory(
        ConcurrentKafkaListenerContainerFactoryConfigurer configurer,
        ConsumerFactory<String, String> consumerFactory) {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
    configurer.configure(factory, consumerFactory);
    // 核心配置,等价于原setAckOnError(false)
    factory.getContainerProperties().setAckOnError(false);
    return factory;
}

入门用户注意事项

  • 开启错误不自动确认后,消费失败的消息offset不会提交,默认会按照你配置的重试规则重复消费,如果没有配置重试和死信队列,会出现单条错误消息阻塞整个消费队列的情况,建议搭配重试次数限制+死信队列使用。
  • 如果你使用的是手动ack模式,异常场景下只要不调用Acknowledgment.acknowledge()方法,也可以实现不自动确认的效果,和上述配置不冲突。

内容的提问来源于stack exchange,提问作者Tanaya Mitra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:08