卡夫卡制片人在失败的情况下重试

时间:2019-09-05 04:30:28

标签: spring-boot apache-kafka transactions kafka-producer-api

我对使用交易的情况下kafka生产者的行为有一些疑问: 首先,下面是一些使用事务生成器的代码:

producer.beginTransaction();
try{
 producer.send(data1);
 producer.send(data2);
 producer.commitTransaction();
}catch(Exception e){
 producer.abortTransaction();
}

如果失败,我不知道如何让kafka生产者重试此流程:

  1. 如果producer.send失败:kafka是否重试此步骤或全部重试?
  2. 如果producer.commitTransaction失败:kafka是否重试此步骤或全部重试?

使用Spring引导,我们可以像这样使用Transaction:

public void sendBatchToKafka(List<String> input) {      
    logger.info("sendBatchToKafka start");
    boolean result = kafkaTemplate.executeInTransaction(kt -> {
        for(var kl : input) {
            kt.send(producerTopic, kl);
        }
        return true;
    });
    logger.info("sendBatchToKafka end " + result);
}
  1. 在这种情况下:当第一次尝试失败时,结果变量会一直等到kafkaTemplate.executeInTransaction重试完成还是抛出异常吗? 在这里重试后,我可以等待最终结果吗?

谢谢!

0 个答案:

没有答案