Caused by: org.apache.flink.util.SerializedThrowable: While open a file for random read: /mnt/hadoop/yarn/local/usercache/tomx/appcache/application_1665995808929_366429/flink-io-62d0d9c8-de12-4678-bf64-fa0446105214/job_a79d0fdbbe7d3adf6601b9d1df871a3b_op_EvictingWindowOperator_3d40dac218b144ba619d5f915bddce501_1uuid_3a975d99-78dc-478b-ab40-4a3be2a76afe/db/101082.sst: Too many open files
各位大佬,我在用rocksdb作为状态后端的时候,遇到了这个问题,似乎是sst文件的数量一直在增长,Flink这个合并过程不是自动进行的吗?
在 Apache Flink 中,当 RocksDB 被用作状态后端时,RocksDB 内部确实有一个后台合并(compaction)流程,它是自动进行的。RocksDB 通过 compaction 过程来管理其 SST 文件(Sorted String Table),包括合并小文件、删除过期或已覆盖的键值对以及释放空间。这个过程有助于优化存储效率和查询性能。
然而,您遇到的问题表明由于某种原因,RocksDB 在尝试打开更多文件时达到了操作系统允许的最大打开文件数限制。这可能是由于以下几个原因:
打开文件句柄限制:操作系统对单个进程可同时打开的文件数量有限制。在 Linux 系统中,可以通过 ulimit -n
命令查看和修改此限制。对于高并发或大量状态存储的应用场景,可能需要增加这个限制。
Compaction 不及时或配置不当:如果 RocksDB 的 compaction 配置不合适(例如,阈值设置得过高),可能导致 SST 文件累积过多而未能及时合并。检查并调整 RocksDB 的 compaction 参数可以帮助解决此类问题。
状态增长过快:如果您的应用状态增长速度非常快,以至于 compaction 过程无法跟上新产生的 SST 文件的速度,也可能导致文件数量激增。
资源限制:Flink 或 RocksDB 在运行过程中可能受限于 YARN 等资源管理系统分配的资源,如果磁盘 I/O 或 CPU 资源不足,可能影响 compaction 的效率。
要解决这个问题,您可以考虑以下措施:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。