繁体   English   中英

Spring Boot Kafka 抑制异常

[英]Spring Boot Kafka suppress exception

我有一个 kafka 监听器,如果实现抛出异常,它将重试几次。 抛出异常时,将其记录为错误。 这会污染我们的哨兵日志。 我想将 Kafka 的消费者错误级别更改为警告级别。

细节:

我有一个 Kafka 侦听器,必须重试一些事件。

@KafkaListener(...)
@RetryableTopic(..)
public void consume(ConsumerRecord<?,?> event) {
   service.sayHello(...); //this call can throw UnhappyException
}

在抛出 UnHappyException 的情况下,它被记录为

> Caused by: org.springframework.kafka.listener.ListenerExecutionFailedException:
> Listener method 'public void
> com.company.hello.world.listener.MyListener.consume(org.apache.kafka.clients.consumer.ConsumerRecord<java.lang.Object,
> ....)' threw
> exception; nested exception is
> com.hello.world.somepackage.exceptions.UnhappyException:
> Animal id 4444 is Unhappy

我们的应用程序将尝试再次处理消息(如果发生异常),并且在某些时候消息将落在死信主题中,或者被处理。 不幸的是,由于我们当前的架构,我们的服务中通常不存在动物 ID,因此它可能会抛出几次异常,直到它被处理。

该消息被记录为“错误”,并在 Sentry 警报平台中创建“错误”警报。

有没有办法将错误 UnHappyException 更改为警告级别,而无需更改哨兵配置?

我试图查看 ConcurrentKafkaListenerContainerFactory 并查看是否可以传入自定义错误处理程序,但它根本没有达到断点。

    @Bean
public ConcurrentKafkaListenerContainerFactory<Object, Object> kafkaListenerContainerFactory(
        ConsumerFactory<Object, Object> consumerFactory,
        KafkaTemplate<String, Object> kafkaTemplate) {
    ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
            new ConcurrentKafkaListenerContainerFactory<>();

    factory.setConsumerFactory(consumerFactory);

    /*
    // Original implementation
    factory.setCommonErrorHandler(new DefaultErrorHandler(
            new DeadLetterPublishingRecoverer(kafkaTemplate), backOff));
    */

    // here I created CustomErrorHandler and tried to extend DefaultErrorHandler and override methods but they do not get hit by debugger at all.
    factory.setCommonErrorHandler(new CustomErrorHandler(
            new DeadLetterPublishingRecoverer(kafkaTemplate), backOff));

事实证明,可重试主题在遇到死信主题之前不会将错误记录为异常,因此无需执行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM