Class FailedRecordProcessor
- java.lang.Object
-
- org.springframework.kafka.listener.KafkaExceptionLogLevelAware
-
- org.springframework.kafka.listener.FailedRecordProcessor
-
- All Implemented Interfaces:
DeliveryAttemptAware
- Direct Known Subclasses:
DefaultAfterRollbackProcessor,RecoveringBatchErrorHandler,SeekToCurrentErrorHandler
public abstract class FailedRecordProcessor extends KafkaExceptionLogLevelAware implements DeliveryAttemptAware
Common super class for classes that deal with failing to consume a consumer record.- Since:
- 2.3.1
-
-
Field Summary
Fields Modifier and Type Field Description protected org.springframework.core.log.LogAccessorlogger
-
Constructor Summary
Constructors Modifier Constructor Description protectedFailedRecordProcessor(java.util.function.BiConsumer<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,java.lang.Exception> recoverer, org.springframework.util.backoff.BackOff backOff)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidaddNotRetryableException(java.lang.Class<? extends java.lang.Exception> exceptionType)Deprecated.in favor ofaddNotRetryableExceptions(Class...).voidaddNotRetryableExceptions(java.lang.Class<? extends java.lang.Exception>... exceptionTypes)Add exception types to the default list.voidclearThreadState()intdeliveryAttempt(TopicPartitionOffset topicPartitionOffset)Return the next delivery attempt for the topic/partition/offset.protected org.springframework.classify.BinaryExceptionClassifiergetClassifier()Return the exception classifier.protected java.util.function.BiPredicate<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,java.lang.Exception>getSkipPredicate(java.util.List<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>> records, java.lang.Exception thrownException)protected booleanisCommitRecovered()Whether the offset for a recovered record should be committed.booleanremoveNotRetryableException(java.lang.Class<? extends java.lang.Exception> exceptionType)Remove an exception type from the configured list.voidsetBackOffFunction(java.util.function.BiFunction<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,java.lang.Exception,org.springframework.util.backoff.BackOff> backOffFunction)Set a function to dynamically determine theBackOffto use, based on the consumer record and/or exception.voidsetClassifications(java.util.Map<java.lang.Class<? extends java.lang.Throwable>,java.lang.Boolean> classifications, boolean defaultValue)Set an exception classifications to determine whether the exception should cause a retry (until exhaustion) or not.voidsetCommitRecovered(boolean commitRecovered)Set to true to commit the offset for a recovered record.voidsetResetStateOnExceptionChange(boolean resetStateOnExceptionChange)Set to true to reset the retryBackOffif the exception is a different type to the previous failure for the same record.voidsetResetStateOnRecoveryFailure(boolean resetStateOnRecoveryFailure)Set to false to immediately attempt to recover on the next attempt instead of repeating the BackOff cycle when recovery fails.-
Methods inherited from class org.springframework.kafka.listener.KafkaExceptionLogLevelAware
getLogLevel, setLogLevel
-
-
-
-
Method Detail
-
getClassifier
protected org.springframework.classify.BinaryExceptionClassifier getClassifier()
Return the exception classifier.- Returns:
- the classifier.
-
setClassifications
public void setClassifications(java.util.Map<java.lang.Class<? extends java.lang.Throwable>,java.lang.Boolean> classifications, boolean defaultValue)Set an exception classifications to determine whether the exception should cause a retry (until exhaustion) or not. If not, we go straight to the recoverer. By default, the following exceptions will not be retried:DeserializationExceptionMessageConversionExceptionMethodArgumentResolutionExceptionNoSuchMethodExceptionClassCastException
- Parameters:
classifications- the classifications.defaultValue- whether or not to retry non-matching exceptions.- See Also:
BinaryExceptionClassifier(Map, boolean),addNotRetryableExceptions(Class...)
-
isCommitRecovered
protected boolean isCommitRecovered()
Whether the offset for a recovered record should be committed.- Returns:
- true to commit recovered record offsets.
-
setCommitRecovered
public void setCommitRecovered(boolean commitRecovered)
Set to true to commit the offset for a recovered record.- Parameters:
commitRecovered- true to commit.
-
setBackOffFunction
public void setBackOffFunction(java.util.function.BiFunction<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,java.lang.Exception,org.springframework.util.backoff.BackOff> backOffFunction)
Set a function to dynamically determine theBackOffto use, based on the consumer record and/or exception. If null is returned, the default BackOff will be used.- Parameters:
backOffFunction- the function.- Since:
- 2.6
-
setResetStateOnRecoveryFailure
public void setResetStateOnRecoveryFailure(boolean resetStateOnRecoveryFailure)
Set to false to immediately attempt to recover on the next attempt instead of repeating the BackOff cycle when recovery fails.- Parameters:
resetStateOnRecoveryFailure- false to retain state.- Since:
- 2.5.5
-
setResetStateOnExceptionChange
public void setResetStateOnExceptionChange(boolean resetStateOnExceptionChange)
Set to true to reset the retryBackOffif the exception is a different type to the previous failure for the same record. ThebackOffFunction, if provided, will be called to get theBackOffto use for the new exception; otherwise, the configuredBackOffwill be used.- Parameters:
resetStateOnExceptionChange- true to reset.- Since:
- 2.6.3
-
deliveryAttempt
public int deliveryAttempt(TopicPartitionOffset topicPartitionOffset)
Description copied from interface:DeliveryAttemptAwareReturn the next delivery attempt for the topic/partition/offset.- Specified by:
deliveryAttemptin interfaceDeliveryAttemptAware- Parameters:
topicPartitionOffset- the topic/partition/offset.- Returns:
- the next delivery attempt.
-
addNotRetryableException
@Deprecated public void addNotRetryableException(java.lang.Class<? extends java.lang.Exception> exceptionType)
Deprecated.in favor ofaddNotRetryableExceptions(Class...).Add an exception type to the default list. By default, the following exceptions will not be retried:DeserializationExceptionMessageConversionExceptionConversionExceptionMethodArgumentResolutionExceptionNoSuchMethodExceptionClassCastException
- Parameters:
exceptionType- the exception type.- See Also:
removeNotRetryableException(Class),setClassifications(Map, boolean)
-
addNotRetryableExceptions
@SafeVarargs public final void addNotRetryableExceptions(java.lang.Class<? extends java.lang.Exception>... exceptionTypes)
Add exception types to the default list. By default, the following exceptions will not be retried:DeserializationExceptionMessageConversionExceptionConversionExceptionMethodArgumentResolutionExceptionNoSuchMethodExceptionClassCastException
- Parameters:
exceptionTypes- the exception types.- Since:
- 2.6
- See Also:
removeNotRetryableException(Class),setClassifications(Map, boolean)
-
removeNotRetryableException
public boolean removeNotRetryableException(java.lang.Class<? extends java.lang.Exception> exceptionType)
Remove an exception type from the configured list. By default, the following exceptions will not be retried:DeserializationExceptionMessageConversionExceptionConversionExceptionMethodArgumentResolutionExceptionNoSuchMethodExceptionClassCastException
- Parameters:
exceptionType- the exception type.- Returns:
- true if the removal was successful.
- See Also:
addNotRetryableExceptions(Class...),setClassifications(Map, boolean)
-
getSkipPredicate
protected java.util.function.BiPredicate<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,java.lang.Exception> getSkipPredicate(java.util.List<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>> records, java.lang.Exception thrownException)
-
clearThreadState
public void clearThreadState()
-
-