You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "蒋佳成(Jiacheng Jiang)" <92...@qq.com> on 2020/09/26 07:39:56 UTC

回复:请教二阶段提交问题

两阶段提交的第一阶段提交中,事务参与者反馈ok后需要作出之后一定能提交事务的承诺,事务参与者需要做些事来兑现承诺比如将事务操作持久化。在FlinkKafkaProducer中,preCommit就是调用了KafkaProducer的flush将数据刷到kafka中,在整个checkpoint完成后再提交事务,如果提交失败,会在job重启时再次提交事务。因此,我们需要保证的是preCommit成功后commit一定要能成功,这个需要根据具体写入的存储提供的特性来完成。




------------------&nbsp;原始邮件&nbsp;------------------
发件人: "高亮"<lingwangjia@qq.com&gt;; 
发送时间: 2020年9月25日(星期五) 中午11:14
收件人: "user-zh"<user-zh@flink.apache.org&gt;; 
主题: 请教二阶段提交问题



各位大佬,请教一下二阶段提交的问题,preCommit预提交失败回滚已经很清楚了,就是在commit阶段提交如果失败会怎么,比较迷惑。


我自己测试了一下,发现只要是commit失败会造成数据丢失,但是看了下方法注释,说是失败了后会重启flink恢复到最近的state,继续提交,可是我在程序里有专门打印source输入的流数据,发现没有按到任何数据进入,也就是说flink重启后就直接调用commit再次提交。


可是再次提交没有意义啊,没有数据[捂脸哭]


所以请教大佬,当commit出现异常后,flink内部是如何解决的,作为flink应用者,如何正确使用避免和解决这类问题!