首页 > 解决方案 > 为什么 Flink 在 JDBC 事务的情况下不能保证 JDBC 连接器的精确一次?

问题描述

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

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

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

标签: apache-flinkflink-streaming

解决方案


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

直到最近,还没有人为 JDBC 连接器完成这项工作。但是,这个功能刚刚合并到master,将包含在1.13中;参见FLINK-15578。有关设计讨论,请参阅[讨论] JDBC 精确一次接收器

有关当前 upsert 支持的更多信息(在 Flink SQL 的上下文中),请参阅idempotent writes


推荐阅读