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]