簡體   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