Flink同步mysql写入Iceberg异常,一秒写入一次
1、现象
在Iceberg数据湖治理过程中发现,同步任务运行7天没有写入数据,运行7天后突然大批量产生Commit,一秒产生一个Commit。
2、问题
Flink写入checkpoint时会在checkpoint中先记录一个递增id, commit后会在Iceberg表中记录一个递增commit ID,记录了两个id,默认两个id相等。
通过不断写入checkpointId、commitId值一样会逐渐递增。 由1、2·····2000
3、从mysql指定时间启动,并且启动失败
从指定时间启动时,因checkpoint先触发,commit后触发,存在checkpoint成功commit失败的情况。导致表中的commitId没有更新,产生上诉现象。
比如checkpoint成功(checkpointId置为1),commit失败(表commitId还是记录旧值2000)
4、从上次失败的checkpoint启动
因checkpoint记录的值重置(1),Iceberg表未重置(2000)。这样导致1<2000,Flink认为数据已经写入iceberg,所以一直被过滤,直到checkpointId上涨到2000以后才开始写入Iceberg。
而满足2000以后,会快速把堆积的commit全部提交,造成1秒产生一个commit现象。腾讯团队在解决中