Java kafka@Listener异常处理-无法配置批处理重试

Java kafka@Listener异常处理-无法配置批处理重试,java,error-handling,listener,spring-kafka,Java,Error Handling,Listener,Spring Kafka,我对卡夫卡非常陌生。我正试图弄清楚并理解@Listener batch consumer factory的错误场景是如何工作的 我在做什么。。。 我正在使用批处理过程中主题中的记录,并将它们插入DB中,如下所示 @KafkaListener( topics = "KAFKA.TEST") public Boolean listen(List<ConsumerRecord<String, User>> list) throws Exception {

我对卡夫卡非常陌生。我正试图弄清楚并理解
@Listener batch consumer factory
的错误场景是如何工作的

我在做什么。。。 我正在使用
批处理过程中
主题
中的记录,并将它们插入
DB
中,如下所示

@KafkaListener( topics = "KAFKA.TEST")
public Boolean listen(List<ConsumerRecord<String, User>> list)  throws Exception {
    Boolean result = null;
    List<User> userList = new ArrayList<>();
    for (ConsumerRecord<String, User> record : list) {
        User user = record.value();
        userList.add(user);
    }
    if(userList.size()>0) {
        result = dbService.insertBatchUser(userList);
        LOGGER.info(" users inserted " + userList.size());
    }
    else
        LOGGER.info(" No users found in the topic ");

    countDownLatch.countDown();
    return result;
}
这里我使用的是
org.springframework.retry.support.RetryTemplate

我得到了一个例外 看

使用@KafkaListener时,请在容器工厂上设置RetryTemplate(以及可选的recoveryCallback),侦听器将封装在相应的重试适配器中

新的Kafka客户端(0.9.x.x或0.10.x.x)不直接与zookeeper通信,只与Kafka服务器本身通信


客户端在内部不断尝试重新连接;打开调试日志以查看活动。

谢谢您提供的信息。我尝试将
RetryTemplate
添加到我的
ConcurrentKafkaListenerContainerFactory
中,但获得异常
java.lang.ClassCastException:org.springframework.kafka.listener.adapter.BatchMessagingMessageListenerAdapter无法转换为org.springframework.kafka.listener.MessageListener
。。。我已在此处添加了我的配置编辑您的问题以添加配置。对不起,我添加了详细信息,请让我知道我在此处做错了什么。感谢LotusOh-我们目前没有为批处理侦听器提供重试适配器-问题是我们不知道从批处理中的何处重试。您可能已经成功地处理了一些记录。您需要直接在侦听器中使用retrytemplate。请参阅
没有为任何批处理消息侦听器提供重试适配器。
谢谢。我需要再次阅读该文档以进一步理解它,并为我的错误场景案例提出正确的解决方案。谢谢你的时间
@Bean
public ConsumerFactory consumerFactory(){
    return new DefaultKafkaConsumerFactory(consumerConfigs(),stringKeyDeserializer(),jsonValueDeserializer());
}
@Bean
public RetryPolicy getRetryPolicy(){
    SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
    simpleRetryPolicy.setMaxAttempts(getMaxRetryAttempts());
    return simpleRetryPolicy;
}

@Bean
public FixedBackOffPolicy getBackOffPolicy() {
    FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
    backOffPolicy.setBackOffPeriod(getRetryInterval());
    return backOffPolicy;
}

@Bean
public RetryTemplate getRetryTemplate(){
    RetryTemplate retryTemplate = new RetryTemplate();
    retryTemplate.setRetryPolicy(getRetryPolicy());
    retryTemplate.setBackOffPolicy(getBackOffPolicy());
    return retryTemplate;
}

@Bean
public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(){
    ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory();
    factory.setConcurrency(getConcurrency());
    factory.getContainerProperties().setPollTimeout(getPollTimeout());
    factory.setConsumerFactory(consumerFactory());
    factory.setBatchListener(true);
    factory.setRetryTemplate(getRetryTemplate());
    return factory;
}
java.lang.ClassCastException: org.springframework.kafka.listener.adapter.BatchMessagingMessageListenerAdapter cannot be cast to org.springframework.kafka.listener.MessageListener
at org.springframework.kafka.config.AbstractKafkaListenerEndpoint.setupMessageListener(AbstractKafkaListenerEndpoint.java:306) ~[spring-kafka-1.1.2.RELEASE.jar:na]
at org.springframework.kafka.config.AbstractKafkaListenerEndpoint.setupListenerContainer(AbstractKafkaListenerEndpoint.java:282) ~[spring-kafka-1.1.2.RELEASE.jar:na]
at org.springframework.kafka.config.AbstractKafkaListenerContainerFactory.createListenerContainer(AbstractKafkaListenerContainerFactory.java:211) ~[spring-kafka-1.1.2.RELEASE.jar:na]