【发布时间】:2019-05-20 09:02:36
【问题描述】:
来自the exactly-once KIP,关于应用程序重启时生产者幂等性InitPidRequest:
2.1 指定 TransactionalId 时如果设置了 transactional.id 配置,则此 TransactionalId 与 InitPidRequest,并映射到对应的PID登录 步骤 2a 中的事务日志。这使我们能够返回相同的 PID 将 TransactionalId 用于生产者的未来实例,因此 可以恢复或中止以前不完整的事务。
除了返回 PID 之外,InitPidRequest 还执行 以下任务:
增加 PID 的纪元,以便任何先前的僵尸 生产者的实例被隔离,无法继续前进 它的交易。
恢复(前滚或后滚)任何 生产者的前一个实例未完成交易。 InitPidRequest 的处理是同步的。一旦回来, 生产者可以发送数据并开始新的交易。
当生产者失败并再次启动并执行InitPidRequest时,最后一个事务“前滚”(我猜这意味着已提交)或“回滚”是什么情况?这是如何控制的?
【问题讨论】:
标签: apache-kafka kafka-producer-api