flinksql写Doris采用2阶段提交时事务被清理后的重启方式

Viewed 27

flinksql写Doris开启了2阶段提交,但是偶尔会碰到任务失败没有及时感知的问题,等感知到问题时已经过去了几个小时了,此时通过最近一次成功的checkpoint重启时会报事务没有被发现的错误(事务保留2小时),关于这个场景有2个疑问请教:
1.如果任务失败很快就感知到,事务没有被清理,此时通过最近一次的checkpoint重启时,checkpoint里面保留的事务id是如何被处理的呢?比如是再次提交事务(会不会导致重复提交)还是说发现该事务之前已经被提交了,就不会重复提交了?
2.如果事务因为过了几个小时被清理了,此时无法通过最近成功一次的checkpoint重启了,通过指定指定时间戳重启(该事件戳就是最近一次checkpoint成功的时间)是否准备呢?

1 Answers

从checkpoint恢复的时候,flink会主动去commit一次txnid

  1. 如果txnid已经被commit成功了,那么就会跳过,继续进行
  2. 如果txnid已经被清理了,会持续commit无法成功,flink任务会持续重启,此时可以从时间戳或者offset恢复