public class KafkaSpoutRetryExponentialBackoff extends Object implements KafkaSpoutRetryService
Implementation of KafkaSpoutRetryService using the exponential backoff formula. The time of the nextRetry is set as follows: nextRetry = failCount == 1 ? currentTime + initialDelay : currentTime + delayPeriod*2^(failCount-1) where failCount = 1, 2, 3, … nextRetry = Min(nextRetry, currentTime + maxDelay)
| Modifier and Type | Class and Description |
|---|---|
static class |
KafkaSpoutRetryExponentialBackoff.TimeInterval |
| Constructor and Description |
|---|
KafkaSpoutRetryExponentialBackoff(KafkaSpoutRetryExponentialBackoff.TimeInterval initialDelay,
KafkaSpoutRetryExponentialBackoff.TimeInterval delayPeriod,
int maxRetries,
KafkaSpoutRetryExponentialBackoff.TimeInterval maxDelay)
The time stamp of the next retry is scheduled according to the exponential backoff formula (geometric progression): nextRetry = failCount == 1 ? currentTime + initialDelay : currentTime + delayPeriod^(failCount-1), where failCount = 1, 2, 3, … nextRetry = Min(nextRetry, currentTime + maxDelay).
|
| Modifier and Type | Method and Description |
|---|---|
Map<org.apache.kafka.common.TopicPartition,Long> |
earliestRetriableOffsets()
Gets the earliest retriable offsets.
|
KafkaSpoutMessageId |
getMessageId(org.apache.kafka.common.TopicPartition tp,
long offset)
Gets the
KafkaSpoutMessageId for the record on the given topic partition and offset. |
boolean |
isReady(KafkaSpoutMessageId msgId)
Checks if a specific failed
KafkaSpoutMessageId is ready to be retried, i.e is scheduled and has retry time that is less than current time. |
boolean |
isScheduled(KafkaSpoutMessageId msgId)
Checks if a specific failed
KafkaSpoutMessageId is scheduled to be retried. |
int |
readyMessageCount()
Get the number of messages ready for retry.
|
boolean |
remove(KafkaSpoutMessageId msgId)
Removes a message from the list of messages scheduled for retrial.
|
boolean |
retainAll(Collection<org.apache.kafka.common.TopicPartition> topicPartitions)
Retains all the messages whose
TopicPartition belongs to the specified Collection<TopicPartition>. |
boolean |
schedule(KafkaSpoutMessageId msgId)
Schedules this
KafkaSpoutMessageId if not yet scheduled, or updates retry time if it has already been scheduled. |
String |
toString() |
public KafkaSpoutRetryExponentialBackoff(KafkaSpoutRetryExponentialBackoff.TimeInterval initialDelay, KafkaSpoutRetryExponentialBackoff.TimeInterval delayPeriod, int maxRetries, KafkaSpoutRetryExponentialBackoff.TimeInterval maxDelay)
The time stamp of the next retry is scheduled according to the exponential backoff formula (geometric progression): nextRetry = failCount == 1 ? currentTime + initialDelay : currentTime + delayPeriod^(failCount-1), where failCount = 1, 2, 3, … nextRetry = Min(nextRetry, currentTime + maxDelay).
By specifying a value for maxRetries lower than Integer.MAX_VALUE, the user decides to sacrifice guarantee of delivery for the previous polled records in favor of processing more records.initialDelay - initial delay of the first retrydelayPeriod - the time interval that is the ratio of the exponential backoff formula (geometric progression)maxRetries - maximum number of times a tuple is retried before being acked and scheduled for commitmaxDelay - maximum amount of time waiting before retryingpublic Map<org.apache.kafka.common.TopicPartition,Long> earliestRetriableOffsets()
KafkaSpoutRetryServiceGets the earliest retriable offsets.
earliestRetriableOffsets in interface KafkaSpoutRetryServicepublic boolean isReady(KafkaSpoutMessageId msgId)
KafkaSpoutRetryServiceChecks if a specific failed KafkaSpoutMessageId is ready to be retried, i.e is scheduled and has retry time that is less than current time.
isReady in interface KafkaSpoutRetryServicemsgId - message to check for readinesspublic boolean isScheduled(KafkaSpoutMessageId msgId)
KafkaSpoutRetryServiceChecks if a specific failed KafkaSpoutMessageId is scheduled to be retried. The message may or may not be ready to be retried yet.
isScheduled in interface KafkaSpoutRetryServicemsgId - message to check for scheduling statuspublic boolean remove(KafkaSpoutMessageId msgId)
KafkaSpoutRetryServiceRemoves a message from the list of messages scheduled for retrial.
remove in interface KafkaSpoutRetryServicemsgId - message to remove from retrialpublic boolean retainAll(Collection<org.apache.kafka.common.TopicPartition> topicPartitions)
KafkaSpoutRetryServiceRetains all the messages whose TopicPartition belongs to the specified Collection<TopicPartition>. All messages that come from a TopicPartition NOT existing in the collection will be removed. This method is useful to cleanup state following partition rebalance.
retainAll in interface KafkaSpoutRetryServicetopicPartitions - Collection of TopicPartition for which to keep messagespublic boolean schedule(KafkaSpoutMessageId msgId)
KafkaSpoutRetryServiceSchedules this KafkaSpoutMessageId if not yet scheduled, or updates retry time if it has already been scheduled. It may also indicate that the message should not be retried, in which case the message will not be scheduled.
schedule in interface KafkaSpoutRetryServicemsgId - message to schedule for retrialpublic int readyMessageCount()
KafkaSpoutRetryServiceGet the number of messages ready for retry.
readyMessageCount in interface KafkaSpoutRetryServicepublic KafkaSpoutMessageId getMessageId(org.apache.kafka.common.TopicPartition tp, long offset)
KafkaSpoutRetryServiceGets the KafkaSpoutMessageId for the record on the given topic partition and offset.
getMessageId in interface KafkaSpoutRetryServicetp - The topic partition of the recordoffset - The offset of the recordKafkaSpoutMessageId if the record was not scheduled for retry.Copyright © 2019 The Apache Software Foundation. All rights reserved.