各位大佬好: > > > > 最近是实现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邮件归档
首先要明确一个问题,MySQL是否支持跨Connection的事务呢? 举个例子:假设Connection A执行事务 T 到commit()方法的时候,Connection A断开(A即为 TwoPhaseCommitSinkFunction 中的pendingCommitTransactions),那么之后建立的一个新的Connection B是否可以commit事务T呢?(我目前的经验是不能,如果可以,请指出)
如果不能,那么MySQL不适用于用2PC这种方法来做端到端一致性的保证 尝试使用幂等来解决端到端的一致性*来自志愿者整理的flink邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。