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恢复,但存在启动不了的风险。

 

posted @ 2024-05-17 14:45  黑水滴  阅读(38)  评论(0编辑  收藏  举报