根据我的理解,为生产者配置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事务是较大的分布式事务的一部分,该事务在第二阶段失败。事务协调器保存了状态并重新启动,并且知道某些参与者可能已提交而有些未提交,因此它要求所有参与者从上一次运行中完成提交。