在JDBC事务的情况下,为什么Flink不能保证JDBC连接器的准确一次?



由于旧系统,我需要从Flink输出数据到MySQL。但是我在flink中找到了这样的文档:

创建的JDBC接收器提供至少一次的保证。使用upsert语句或幂等更新可以有效地实现精确一次。

但是系统不能使用幂等更新。我想知道为什么Flink在JDBC事务的情况下不能保证JDBC连接器的准确一次?谢谢。

这不是微不足道的原因是,对于Flink接收器来说,要利用外部数据存储中的事务支持,两阶段提交必须与Flink的检查点机制集成。

直到最近,还没有人为JDBC连接器做过这项工作。然而,这个功能刚刚被合并到master中,并将包含在1.13中;看到flink - 15578。有关设计的讨论,请参见[discussion] JDBC精确一次接收器。

有关当前upsert支持(在Flink SQL上下文中)的更多信息,请参阅幂等写入。

最新更新