![](/img/trans.png)
[英]How to implement HttpRequestRetryHandler with Exponential Backoff?
[英]How to implement exponential retry in kafka properly?
我是卡夫卡的初學者。
我一直在嘗試對 Kafka 消費者中的失敗記錄實施指數重試。 重試 4 次后,消費者需要關閉。 應在 1 分鍾后重試,然后 5 分鍾后重試,然后在 15 分鍾后重試,然后 30 分鍾后重試。 在所有這些嘗試之后,如果重試不成功,那么我需要關閉消費者。 我已經完成了以下操作來實現它。 但 5 分鍾后(max.poll.interval),消費者重新平衡。 如何完成所有重試嘗試(在失敗的情況下嘗試 5 次)然后關閉消費者?
ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
backOffPolicy.setInitialInterval(60000);
backOffPolicy.setMultiplier(5);
backOffPolicy.setMaxInterval(900000);
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setRetryPolicy(retryPolicy());
retryTemplate.setBackOffPolicy(backOffPolicy);
return retryTemplate;
}
private RetryPolicy retryPolicy() {
Map<Class<? extends Throwable>, Boolean> exceptionMap = new HashMap<>();
exceptionMap.put(IllegalArgumentException.class, false);
exceptionMap.put(RecoverableDataAccessException.class, true);
SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy(4, exceptionMap, true);
return simpleRetryPolicy;
}
max.poll.interval
是 kafka 集群在將其視為“死亡”之前等待來自消費者的輪詢調用的時間上限。 一旦消費者組的一個消費者被認為死亡,kafka 集群將觸發該消費者組的重新平衡。
在您的用例中,您希望在進行后續輪詢之前等待 >51 分鍾(重試時間 + 實際處理時間)。 因此,您需要將此屬性增加到足夠的值(> 51 分鍾),以便 kafka 集群不會假設消費者已經死亡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.