为什么Spring Kafka Consumer发生异常时滞后不增加

Why does not lag increase when exception occurs in Spring Kafka Consumer

提问人:samsamsamsmasma 提问时间:9/17/2023 更新时间:9/17/2023 访问量:24

问:

我正在使用弹簧卡夫卡,我有一个问题。 Spring Kafka 版本为 2.6.X。

我将自动提交设置设置为 false。 此时,使用消息的使用者强制犯了错误。 正如我所料,提交不是手动完成的,因此应该增加延迟。 但是,滞后并没有增加。 如何处理现有的默认错误处理程序?

class KafkaConsumerConfig {
  @Bean
    fun multiTypeConsumerFactory(): ConsumerFactory<String, Any> {
        val props = HashMap<String, Any>()
        props[ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG] = "localhost:9092"
        props[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java
        props[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = JsonDeserializer::class.java
        props[ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG] = false
        return DefaultKafkaConsumerFactory(props)
    }

    @Bean
    fun multiTypeKafkaListenerContainerFactory(): ConcurrentKafkaListenerContainerFactory<String, Any> {
        val factory = ConcurrentKafkaListenerContainerFactory<String, Any>()
        factory.setConsumerFactory(multiTypeConsumerFactory())
        return factory
    }



}

@Component
@KafkaListener(topics = ["testTopic"], groupId = "group_sdas")
class Consumer {

    @KafkaHandler
    fun handleFoo(message: Foo) {
        println("Received Message in group foo: ${message}")
    }

    @KafkaHandler
    fun handleBar(message: Bar) {
        throw RuntimeException("ssstest sss")
    }


    

}

即使发生错误,滞后也不会增加,因为标头中不包含类型 id

spring-boot kafka-consumer-api spring-kafka 自动提交

评论

1赞 Stéphane Derosiaux 9/18/2023
将 AckMode 设置为 MANUAL 并添加一个参数来提交(或不提交)。请参阅 docs.spring.io/spring-kafka/docs/3.0.x/reference/html/...fun handleBar(message: Bar, ack: Acknowledgment) { ... ack.acknowledge(); }
0赞 samsamsamsmasma 9/18/2023
如果自动提交设置为 false,我们不应该进行手动提交,而不管访问模式如何?而且即使ackMode是MANUAL也没有typeid头,所以org.springframework.kafka.KafkaException:没有找到类的方法,但它是在错误处理程序中提交的,所以滞后似乎没有增加。
0赞 Gary Russell 9/18/2023
如果可以获取反序列化异常,则需要使用 .docs.spring.io/spring-kafka/docs/current/reference/html/......ErrorHandlingDeserializer

答: 暂无答案