开发者社区> 问答> 正文

Flink实现Kafka到Mysql的 End-To-End Exactly-Once,是否可以尝试

各位大佬好: > > > > 最近是实现Kafka到Mysql的 End-To-End Exactly-Once中遇到以下2个问题: > > 1:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: > > Communications link failure during commit(). Transaction resolution unknown. > > 2:org.apache.flink.streaming.runtime.tasks.TimerException: > > org.apache.flink.streaming.runtime.tasks.ExceptionInChainedOperatorException: > > Could not forward element to next operator > > > > 已经做了一个最简单的复现问题的demo,求指教 > > git clone https://github.com/lusecond/flink_help --depth=1 > > > > > > 测试过程中,发现继承TwoPhaseCommitSinkFunction类的4个重写方法beginTransaction、preCommit、commit、abort > > 分别在不同的线程工作,怀疑过因为线程切换导致jdbc的事务提交出问题,已经做过相关测试排除不是由此引起的问题

*来自志愿者整理的flink邮件归档

展开
收起
彗星halation 2021-12-08 10:36:12 1369 0
1 条回答
写回答
取消 提交回答
  • 首先要明确一个问题,MySQL是否支持跨Connection的事务呢? 举个例子:假设Connection A执行事务 T 到commit()方法的时候,Connection A断开(A即为 TwoPhaseCommitSinkFunction 中的pendingCommitTransactions),那么之后建立的一个新的Connection B是否可以commit事务T呢?(我目前的经验是不能,如果可以,请指出)

    如果不能,那么MySQL不适用于用2PC这种方法来做端到端一致性的保证 尝试使用幂等来解决端到端的一致性*来自志愿者整理的flink邮件归档

    2021-12-08 10:52:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像