Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在kafka中正确实现指数重试?_Java_Spring Boot_Apache Kafka_Kafka Consumer Api_Event Stream - Fatal编程技术网

Java 如何在kafka中正确实现指数重试?

Java 如何在kafka中正确实现指数重试?,java,spring-boot,apache-kafka,kafka-consumer-api,event-stream,Java,Spring Boot,Apache Kafka,Kafka Consumer Api,Event Stream,我是卡夫卡的初学者。 我一直在尝试对Kafka consumer中的失败记录执行指数重试。重试4次后,消费者需要关机。重试应在1分钟后、5分钟后、15分钟后、30分钟后进行。在所有这些尝试之后,如果重试不成功,那么我需要关闭使用者。 为了实现这一点,我做了以下几点。但5分钟后(最大投票间隔),消费者重新平衡。如何完成所有重试尝试(失败时重试5次),然后关闭消费者 ExponentialBackOffPolicy backOffPolicy = new ExponentialBac

我是卡夫卡的初学者。
我一直在尝试对Kafka consumer中的失败记录执行指数重试。重试4次后,消费者需要关机。重试应在1分钟后、5分钟后、15分钟后、30分钟后进行。在所有这些尝试之后,如果重试不成功,那么我需要关闭使用者。 为了实现这一点,我做了以下几点。但5分钟后(最大投票间隔),消费者重新平衡。如何完成所有重试尝试(失败时重试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;
    }
ExponentialBackOffPolicy backOffPolicy=new ExponentialBackOffPolicy();
backOffPolicy.setInitialInterval(60000);
退避政策。设置乘数(5);
backOffPolicy.setMaxInterval(900000);
RetryTemplate RetryTemplate=新RetryTemplate();
setRetryPolicy(retryPolicy());
retryTemplate.setBackOffPolicy(backOffPolicy);
返回retryTemplate;
}
private RetryPolicy RetryPolicy(){

Map
max.poll.interval
是卡夫卡群集在将消费者的轮询呼叫视为“死亡”之前等待该消费者的轮询呼叫的时间上限。一旦消费者组中的一个消费者被视为死亡,卡夫卡群集将触发该消费者组的重新平衡

在您的用例中,您希望等待>51分钟(重试时间+实际处理时间),然后再进行后续轮询。因此,您需要将此属性增加到足够的值(>51分钟),以便kafka群集不会假定消费者已死亡