Flink同步kafka到iceberg数据延迟,两个checkpoint后才可查询
一、问题描述
用户配置了高级参数很多,观察kafka增量数据不多,flink负载不高情况下两个checkpoint后才可查询到数据。 排查时hdfs有数据文件产生,但是mainfast文件中最新快照id没变化。
二、原因
经腾讯排查,用户参数指定高级参数execution.checkpointing.unaligned: true引起。
写入iceberg时,flink writer算子收到checkpoint通知后会把本地内存数据写出到文件,写出成功时会把文件名提交给IcebergFilesCommitter。
正常情况是writter算子写出数据到文件后,把文件名先提交给Committer,Committer收到所有文件名后再去提交生成iceberg快照。
加上该参数后提交乱序,Committer算子存在只收到部分文件名就提交的情况,导致查询该快照没有最新数据。
加上该参数后,有些数据没处理情况下,这部分未提交数据放入state中,就可以做checkpoint,但是当前checkpoint没有处理这些消息。等到下个checkpoint时继续处理这些消息,生成文件名,继续commit,数据不会丢失,这部分数据文件在下个快照后才可查询。
该参数在flink1.11引入,直到flink1.18还不太稳定,默认没有打开,适用于某些task处理复杂极端情况下使用,使用该参数就可能产生数据延迟。
三、恢复
去除execution.checkpointing.unaligned: true参数,savepoint后启动。!!!存在启动不成功风险,我们用户尝试后可从savepoint恢复,但存在启动不了的风险。