批处理模式下如何处理反序列化异常

时间:2021-04-08 05:36:38

标签: spring-kafka

如何在批处理模式下处理反序列化异常?
我使用的是 spring kafka 和 spring boot -2.3.8 版本。

试过这个选项:

@Bean
  public ConcurrentKafkaListenerContainerFactory<?, ?> kafkaListenerContainerFactory(
      ConcurrentKafkaListenerContainerFactoryConfigurer configurer,
      ConsumerFactory<Object, Object> kafkaConsumerFactory) {
    ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
        new ConcurrentKafkaListenerContainerFactory<>();
    configurer.configure(factory, kafkaConsumerFactory); 
    factory.setBatchErrorHandler(new SeekToCurrentBatchErrorHandler());
    }

但它抛出异常: 引起:java.lang.IllegalStateException:错误处理程序必须是一个ErrorHandler,而不是org.springframework.kafka.listener.SeekToCurrentBatchErrorHandler

这是我的应用程序属性:

spring.kafka.consumer.bootstrap-servers = localhost:9093
spring.kafka.consumer.enable-auto-commit = false
spring.kafka.consumer.auto-offset-reset = earliest
spring.kafka.consumer.max-poll-records = 10

spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer

spring.kafka.listener.type =  batch 
spring.kafka.ack.discard =  true
spring.kafka.listener.ack-mode = MANUAL
spring.kafka.listener.concurrency = 1
idle-between-polls  = 120000

1 个答案:

答案 0 :(得分:1)

这意味着未正确设置侦听器类型。

我刚刚将您的代码和配置复制到了一个新应用中,它按预期工作。