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

大家好。 flink1.15.2使用hdfs的filesystem做存储,现在对state设置?

大家好。 flink1.15.2使用hdfs的filesystem做存储,state backend为EmbeddedRocksDBStateBackend。

现在对state设置ttl,报这个错?image.png 请问有人遇到过吗?怎么解决的?

展开
收起
真的很搞笑 2023-06-11 22:07:31 131 0
4 条回答
写回答
取消 提交回答
  • 为了使用状态 TTL,必须首先构建一个StateTtlConfig配置对象。然后可以通过传递配置在任何状态描述符中启用 TTL 功能:

    import org.apache.flink.api.common.state.StateTtlConfig;
    import org.apache.flink.api.common.state.ValueStateDescriptor;
    import org.apache.flink.api.common.time.Time;
    
    StateTtlConfig ttlConfig = StateTtlConfig
        .newBuilder(Time.seconds(1))
        .setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)
        .setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
        .build();
    
    ValueStateDescriptor<String> stateDescriptor = new ValueStateDescriptor<>("text state", String.class);
    stateDescriptor.enableTimeToLive(ttlConfig);
    

    该newBuilder方法的第一个参数是强制性的,它是生存时间值。
    更新类型配置何时刷新状态 TTL(默认情况下OnCreateAndWrite):

    • StateTtlConfig.UpdateType.OnCreateAndWrite- 仅在创建和写入权限时
    • StateTtlConfig.UpdateType.OnReadAndWrite- 也有读取权限

    ——参考链接

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

    根据提供的堆栈跟踪信息,出现的问题似乎是由于 RocksDB 插件(org.rocksdb.RocksDB)的某个类找不到,具体是 org.rocksdb.FlinkCompactionFilter$FlinkCompactionFilterFactory 类。该异常发生在打开一个 FunctionUtils.openFunction 方法的时候。

    有几个可能的原因造成这样的情况:

    1.RocksDB 相关插件缺失

    确认你的 Flink 安装包包含了 RocksDB 插件及其相关 jar 文件。如果没有,请下载所需的插件并将其加入到 classpath 中。

    2.ClassLoader 错误

    有时,ClassLoader 会遇到一些问题,例如无法加载某些类或库。确保你的应用程序能够正确加载所需的所有类和库。

    3.版本冲突

    可能存在的不同版本的 RocksDB 组件相互干扰导致问题发生。确保只有一组 RocksDB 组件被引入到项目的依赖中。

    4.系统环境变量问题

    可能缺少某些必需的环境变量,特别是指向 rocksdbjni.jar 的路径。你需要确保这些环境变量存在并且指定了正确的值。

    5.兼容性问题

    当前版本的 Flink 可能并不完全兼容你使用的 RocksDB 版本。查阅官方文档以了解最新兼容性的详细信息。

    请注意,这些问题可能因环境和软件版本差异而略有不同。因此,最好参考 Flink 文档和其他社区论坛讨论来获得更详细的指导和支持。

    2024-01-19 15:38:53
    赞同 展开评论 打赏
  • 您好!看起来您是在使用 Apache Flink 1.15.2 版本并试图启用状态 TTL (Time to Live) 功能来清理不再使用的键值对。从您的日志来看,当 Task 正在初始化内部状态时发生了 java.lang.UnsatisfiedLinkError 错误。这通常是由于链接不匹配或找不到动态链接库文件引起的。

    对于这种类型的错误,请按照下面的一些步骤排查:

    1. 检查您的操作系统版本以及 JDK 或者 Native Library 是否兼容。

      • 如果是 Linux,则确认你的机器上的 glibc 版本至少为 2.17。
      • 如果是 macOS,则确认你的机器上的 libstdc++.so.6 版本至少为 7.3.
      • 如果是 Windows,则确认你的机器上有合适的 Visual Studio C++ 编译器。
    2. 查看您的 Flink 实例的日志以了解有关错误堆栈的信息:

      org.apache.flink.runtime.taskmanager.Task$ExceptionInThread.run(Task.java:563)
      at java.lang.Thread.run(Thread.java:748)
      

      在这里,我们看到错误发生在 Task 类的一个 run 方法中。查看具体的线程堆栈跟踪可以帮助定位具体出错的位置。

    3. 更新 Flink Native Libraries:

      • 如果您当前的 Native Libraries 不是最新的版本,可以尝试更新它们。您可以访问 Flink 官方网站下载最新版的 Native Libraries。
      • 如果您是从源码编译的 Flink,那么请确保您正确设置了所有依赖项并且遵循官方文档指南。
    4. 清除旧的 Native Libraries:

      • 卸载现有的 Native Libraries。
      • 删除任何相关目录下的.so 文件。
      • 重启计算机以刷新操作系统的符号表。
    5. 重试实验:

      • 一旦完成上述步骤后,再次执行您的实验看看是否解决了问题。
    2024-01-15 15:14:59
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    问题出在尝试注册具有 TTL(Time-to-Live)的键值状态信息时。具体来说,这是由于在尝试创建具有 TTL 设置的 RocksDB TtlCompactionFilter 时出现了不满足的链接错误。
    要解决此问题,您可以尝试以下方法:

    1. 确保 RocksDB 版本与 Flink 版本兼容。在这种情况下,您可能需要升级或降级 RocksDB 版本,以便与 Flink 1.15.2 兼容。您可以在项目的官方文档中查找兼容的版本。
    2. 如果问题仍然存在,您可以考虑将状态后端更改为其他类型,例如使用 RocksDB 的其他版本或者更改為其他存储系统,如 Apache Cassandra 或 HBase。
    3. 如果更改状态后端不是您的首选解决方案,您还可以尝试在 Flink 中禁用 TTL 功能。要这样做,您需要将 state.backend 设置为 None,并确保在创建 Flink 作业时禁用 TTL 功能。
    2024-01-12 21:48:34
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载