簡體   English   中英

如何在kafka中正確實現指數重試?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM