在Flink中checkpoint产生的文件名太长报错,各位大佬有遇到的吗?[阿里云实时计算 Flink版]

代码实现mongo数据整库写hudi,采用RocksDBStateBackend状态后端,在Flink中checkpoint产生的文件名太长报错,各位大佬有遇到的吗?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
3 条回复 A 作者 M 管理员
  1. 确实有遇到这种情况的可能。当使用Flink的RocksDBStateBackend时,由于RocksDB的特性,可能会在磁盘上生成大量的文件。特别是在使用checkpoint的时候,可能会产生大量的文件。如果文件名过长,可能会超过操作系统允许的文件名长度限制,从而产生错误。

    这个问题可以通过以下几种方式解决:

    1. 缩短作业名称或任务名称:由于文件名是包含作业或任务名称的,因此缩短作业或任务名称可以减少文件名长度。
    2. 调整RocksDB的配置:可以通过调整RocksDB的配置来减少产生的文件数量。例如,可以增加state.backend.rocksdb.local-db-dirs的数量,让数据分布在更多的目录中。
    3. 调整checkpoint的频率和大小:可以通过调整checkpoint的频率和大小来减少产生的文件数量。例如,可以增加checkpoint的间隔时间,或者减少每次checkpoint的数据量。
    4. 使用其他的状态后端:如果这个问题始终无法解决,可能需要考虑使用其他的状态后端。例如,可以使用Flink的内置KVState后端,或者使用其他的持久化存储作为状态后端。
  2. 在使用 RocksDBStateBackend 过程中,确实可能会遇到 checkpoint 文件名过长而导致的错误。由于 Linux 系统限制了文件路径的最大长度为 255 字节,当 checkpoint 文件名称太长时就会发生错误。
    解决这个问题的方法有两种:

    1. 增加任务 manager 的数量:通过增加任务 manager 的数量,可以将更多的 checkpoint 分散到多个目录中,从而减少单个文件路径的长度。具体做法是在 Flink 配置文件中增加 taskmanager.numberOfTaskSlots 参数,使其大于当前的任务数量。
    2. 修改 RocksDBStateBackend 的配置:可以修改 RocksDB 的相关配置项,将 checkpoint 文件保存到其他位置,或者改变文件命名规则以减少长度。具体做法是在 Flink 配置文件中增加 rocksdb.local.dir 和 state.checkpoints.dir 参数,将 checkpoint 文件保存到其他位置;或者添加 rocksdb.write-ahead-log.filename 表示法,使其只包含时间戳而不包含任务 ID 等冗余信息。
  3. 当采用 RocksDBStateBackend 作为状态后端时,在 Flink 中可能出现文件名过长的问题,请采取如下措施:

    • 在执行 checkpoint 时,请检查和调整文件名长度限制参数;
    • 适当减小命名规则或精简存储名称;
    • 使用通配符形式的命名规则,比如 *.json*.txt 等;
    • 删除不需要的历史 checkpoint 文件,以降低存储成本。
  4. 调整一下rocksdbjni包的版本。此回答整理自钉群“【②群】Apache Flink China社区”