开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

大佬们有没有遇到这个Flink问题啊?

大佬们有没有遇到这个Flink问题啊?image.png

展开
收起
真的很搞笑 2023-06-11 21:57:47 100 0
4 条回答
写回答
取消 提交回答
  • 首先检查系统ulimit -n的文件描述符限制,再注意检查程序内是否有资源(如各种连接池的连接)未及时释放。

    值得注意的是,Flink使用RocksDB状态后端也有可能会抛出这个异常,此时需修改flink-conf.yaml中的state.backend.rocksdb.files.open参数,如果不限制,可以改为-1。

    ——参考链接

    2024-01-25 19:28:32
    赞同 1 展开评论 打赏
  • 某政企事业单位安全运维工程师,主要从事系统运维及网络安全工作,多次获得阿里云、华为云、腾讯云征文比赛一二等奖;CTF选手,白帽,全国交通行业网络安全大赛二等奖,全国数信杯数据安全大赛银奖,手握多张EDU、CNVD、CNNVD证书。

    这个问题似乎与Apache Flink框架内部的一个状态管理组件——RocksDB state back-end有关。从日志来看,当尝试创建一个新的RocksDB状态时遇到了太多已打开文件的情况。这通常是因为操作系统已经达到了最大允许打开文件的数量上限或者磁盘空间不足等原因引起的。

    为了定位和解决问题,请按照下面几个步骤进行诊断和修复:

    一、检查系统资源

    1.打开文件数限制

    请检查Linux系统的open files limit是否达到上限。可以通过以下命令获取当前系统允许的最大打开文件数:

    ulimit -a | grep open_files 或者 cat /proc/sys/fs/file-max
    

    若发现已经达到上限,你可以临时提升此限制(对于非root用户来说),比如将限制设为65535个文件:

    sudo sysctl fs.file-max=65535 && sudo ulimit -s unlimited && sudo ulimit -Hn unlimited
    

    如果你希望永久改变这个限制,编辑 /etc/security/limits.conf 并添加类似如下的条目:

    * soft nofile 65535
    * hard nofile 65535
    

    然后重启系统使新设置生效。

    2.磁盘空间

    检查硬盘剩余空间是否充足。如果磁盘空间紧张,可能导致文件写入失败。使用df 命令查看磁盘使用率:

    df -h /
    

    如果有低空闲空间,清理不必要的文件释放空间。

    二、调整Flink配置

    针对Apache Flink本身,有一些配置项可以帮助缓解这种问题:

    优化RocksDB状态后端设置

    • 尝试减少RocksDB状态后端的内存占用。在Flink的配置文件中找到state.backend.rocksdb.memory.max-chunks-to-migrate选项,并适当降低其数值;

    • 调整RocksDB状态后端的垃圾回收机制;

    // Java代码示例,用于设置RocksDB状态后端的垃圾回收器类型为延迟回收器。
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setStateBackend(new RocksDBStateBackend());
    env.setParallelism(parallelism);
    env.getConfig().setGlobalConfigurationOptions(
            new Configuration()
                    .set("state.backend.rocksdb.jni.gc.type", "delayed")
                    // 更多其他配置...
    );
    

    使用异步快照

    考虑切换至异步快照模式,这样可以减少同步I/O请求带来的影响。在Flink的配置文件中找到state.savepoints.sync选项,并将其设置为false:

    # 在配置文件中添加以下属性:
    state.savepoints.sync=false;
    

    三、监控及调试

    利用JMX指标以及Flink自带的日志工具,密切关注RocksDB状态后端的工作状态。一旦发现问题,可以根据具体情况采取相应的解决方案。

    2024-01-19 16:07:43
    赞同 展开评论 打赏
  • 这个问题似乎与 RocksDB State Backend 有关。它可能是因为打开太多文件导致的问题。检查一下系统资源限制或者调整 RocksDB 配置可能是解决问题的方法。

    我们可以试着减少 RocksDB 同步写入频率,从而降低磁盘 I/O 并提高性能。可以通过修改 RocksDBOptions 设置来做到这一点。例如,增加 WriteBufferManager 的 buffer_size 参数,或者减小 write_buffer_manager->max_write_buffers 数量。

    也可以优化 RocksDB 状态管理的方式。比如,只保留最新的几个 checkpoint state,而不是全部历史状态。这需要在恢复的时候选择性地加载特定的 checkpoint state。

    还可以尝试升级到更高版本的 RocksDB,因为有些已知的 bug 已经过修复。同时,也有可能是某个特定的操作系统环境下出现的问题,因此针对不同平台的适配也是必要的。

    2024-01-15 15:25:01
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    从您提供的错误日志来看,问题可能是由于RocksDB打开的文件数量过多导致的。RocksDB是一个基于磁盘的存储系统,它使用文件来存储数据。当RocksDB打开的文件数量超过系统允许的最大值时,可能会出现"Too many open files"的错误。
    要解决这个问题,您可以尝试以下方法:

    1. 调整RocksDB的配置以减少打开的文件数量。例如,可以尝试增加RocksDB的缓存大小,以减少磁盘I/O操作。您可以在RocksDB的配置文件中设置cache_size参数来调整缓存大小。
    2. 优化您的Flink任务,以减少对RocksDB的访问。这可能包括减少并行度、优化数据处理逻辑或使用更高效的窗口操作等。
    3. 检查您的系统资源限制,确保Flink任务有足够的资源来运行。如果您的系统允许,可以尝试增加文件句柄限制,以便Flink任务能够打开更多的文件。
    4. 对于一些特定的场景,您可能需要考虑使用其他存储系统,例如HBase或Cassandra,这些系统通常能够更好地支持高并发访问。
    2024-01-12 21:40:26
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载