[英]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.