生产者重新启动后,继续进行Kafka生产者事务

时间:2019-06-05 13:18:16

标签: apache-kafka kafka-producer-api

根据我的理解,为生产者配置transactional.id的目的是隔离僵尸生产者并主动中止其交易,从而避免等待超时。

我感兴趣的是能够继续进行交易。例如:

producer.beginTransaction();
producer.send(...);
// now the producer crashes

// start a new producer with same transactional.id
producer = new KafkaProducer(...); 
// this aborts the unfinished transaction of the previous producer
producer.initTransactions(); 

我的直觉是应该有可能,没有API。有什么阻止我们这样做的吗?

我为什么需要这个?在我的情况下,Kafka事务是较大的分布式事务的一部分,该事务在第二阶段失败。事务协调器保存了状态并重新启动,并且知道某些参与者可能已提交而有些未提交,因此它要求所有参与者从上一次运行中完成提交。

0 个答案:

没有答案