Class ExponentialBackOffDefaultErrorHandler

java.lang.Object
org.springframework.kafka.listener.KafkaExceptionLogLevelAware
org.springframework.kafka.listener.ExceptionClassifier
org.springframework.kafka.listener.FailedRecordProcessor
org.springframework.kafka.listener.FailedBatchProcessor
org.springframework.kafka.listener.DefaultErrorHandler
dev.vality.kafka.common.exception.handler.ExponentialBackOffDefaultErrorHandler
All Implemented Interfaces:
org.springframework.kafka.listener.CommonErrorHandler, org.springframework.kafka.listener.DeliveryAttemptAware

public class ExponentialBackOffDefaultErrorHandler
extends org.springframework.kafka.listener.DefaultErrorHandler
Сейчас при создании ConcurrentKafkaListenerContainerFactory в качестве обработчика ошибок мы используем реализации интерфейса BatchErrorHandlerSeekToCurrentErrorHandler и SeekToCurrentBatchErrorHandler. В данной библиотеке эти хендлеры наследуют SeekToCurrentWithSleepBatchErrorHandler и SeekToCurrentWithSleepErrorHandler. В данный момент эти реализации являются устаревшими, а в spring boot 3 эти классы становятся package private, поэтому мы должны избавиться от их использования.

Вместо них официальная документация spring предлагает использовать CommonErrorHandler и его реализацию DefaultErrorHandler.

Данная библиотека предлагает класс ExponentialBackOffDefaultErrorHandler, который наследует DefaultErrorHandler.

Данный класс ограничивает DefaultErrorHandler использованием только экспоненциально замедляющегося таймаута для перечитывания оффсета, что в свою очередь поможет не взрывать эластик. Также добавляется отключение коммита оффсета после обработки хендлером isAckAfterHandle(), а также дополнительное логгирование на уровне этого хендлера средствами утилит этой библиотеки.

Используйте ExponentialBackOffDefaultErrorHandlerFactory для создания инстанса этого класса

  • Field Summary

    Fields inherited from class org.springframework.kafka.listener.FailedRecordProcessor

    logger
  • Constructor Summary

    Constructors
    Constructor Description
    ExponentialBackOffDefaultErrorHandler​(org.springframework.util.backoff.ExponentialBackOff exponentialBackOff)  
  • Method Summary

    Modifier and Type Method Description
    void handleBatch​(Exception thrownException, org.apache.kafka.clients.consumer.ConsumerRecords<?,​?> data, org.apache.kafka.clients.consumer.Consumer<?,​?> consumer, org.springframework.kafka.listener.MessageListenerContainer container, Runnable invokeListener)  
    void handleRemaining​(Exception thrownException, List<org.apache.kafka.clients.consumer.ConsumerRecord<?,​?>> records, org.apache.kafka.clients.consumer.Consumer<?,​?> consumer, org.springframework.kafka.listener.MessageListenerContainer container)  
    boolean isAckAfterHandle()  

    Methods inherited from class org.springframework.kafka.listener.DefaultErrorHandler

    deliveryAttemptHeader, handleOtherException, remainingRecords, setAckAfterHandle, setCommitRecovered

    Methods inherited from class org.springframework.kafka.listener.FailedBatchProcessor

    doHandle

    Methods inherited from class org.springframework.kafka.listener.FailedRecordProcessor

    clearThreadState, deliveryAttempt, getRecoveryStrategy, getSkipPredicate, isCommitRecovered, setBackOffFunction, setResetStateOnExceptionChange, setResetStateOnRecoveryFailure, setRetryListeners

    Methods inherited from class org.springframework.kafka.listener.ExceptionClassifier

    addNotRetryableExceptions, getClassifier, removeNotRetryableException, setClassifications

    Methods inherited from class org.springframework.kafka.listener.KafkaExceptionLogLevelAware

    getLogLevel, setLogLevel

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.springframework.kafka.listener.CommonErrorHandler

    clearThreadState, deliveryAttempt, handleRecord
  • Constructor Details

    • ExponentialBackOffDefaultErrorHandler

      public ExponentialBackOffDefaultErrorHandler​(org.springframework.util.backoff.ExponentialBackOff exponentialBackOff)
  • Method Details

    • isAckAfterHandle

      public boolean isAckAfterHandle()
      Specified by:
      isAckAfterHandle in interface org.springframework.kafka.listener.CommonErrorHandler
      Overrides:
      isAckAfterHandle in class org.springframework.kafka.listener.DefaultErrorHandler
    • handleRemaining

      public void handleRemaining​(Exception thrownException, List<org.apache.kafka.clients.consumer.ConsumerRecord<?,​?>> records, org.apache.kafka.clients.consumer.Consumer<?,​?> consumer, org.springframework.kafka.listener.MessageListenerContainer container)
      Specified by:
      handleRemaining in interface org.springframework.kafka.listener.CommonErrorHandler
      Overrides:
      handleRemaining in class org.springframework.kafka.listener.DefaultErrorHandler
    • handleBatch

      public void handleBatch​(Exception thrownException, org.apache.kafka.clients.consumer.ConsumerRecords<?,​?> data, org.apache.kafka.clients.consumer.Consumer<?,​?> consumer, org.springframework.kafka.listener.MessageListenerContainer container, Runnable invokeListener)
      Specified by:
      handleBatch in interface org.springframework.kafka.listener.CommonErrorHandler
      Overrides:
      handleBatch in class org.springframework.kafka.listener.DefaultErrorHandler