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

flink每次关闭客户端,建立的cdc 的job就不见了,看来没有持久化存储,应该如何解决?

flink每次关闭客户端,建立的cdc 的job就不见了,看来没有持久化存储,应该如何解决,可以用mysql存储关联吗?

展开
收起
wenti 2023-02-06 16:23:32 277 0
3 条回答
写回答
取消 提交回答
  • 解决 Flink CDC 客户端关闭后作业丢失的问题

    Flink CDC 客户端关闭后,作业丢失是因为作业状态没有持久化存储。要解决此问题,可以采用以下方法:

    1. 使用状态后端持久化作业状态

    Flink 提供了多种状态后端选项,可以将作业状态持久化到外部存储中。例如:

    • RocksDBStateBackend:将状态存储在 RocksDB 中,提供高性能和持久性。
    • FsStateBackend:将状态存储在分布式文件系统(如 HDFS)中,提供高可用性和容错性。

    2. 使用外部存储管理作业状态

    除了使用 Flink 提供的状态后端之外,还可以使用外部存储来管理作业状态,例如:

    • MySQL:将作业状态存储在 MySQL 数据库中。
    • Redis:将作业状态存储在 Redis 缓存中。

    使用 MySQL 存储关联

    要使用 MySQL 存储 Flink CDC 作业状态的关联,可以按照以下步骤进行:

    1. 创建 MySQL 表:创建一张表来存储作业状态的关联,例如:
    CREATE TABLE flink_cdc_state (
      job_id VARCHAR(255) NOT NULL,
      state_key BINARY NOT NULL,
      state_value BINARY NOT NULL,
      PRIMARY KEY (job_id, state_key)
    );
    
    1. 配置 Flink 作业:在 Flink 作业中,使用 FsStateBackend 将作业状态存储到 MySQL 中:
    // 创建状态后端
    FsStateBackend stateBackend = new FsStateBackend(
        "jdbc:mysql://localhost:3306/flink_cdc_state", // MySQL 连接 URL
        "flink_cdc_state" // MySQL 表名
    );
    
    // 设置状态后端
    env.setStateBackend(stateBackend);
    
    1. 配置 MySQL 连接池:优化 MySQL 连接池的配置,以提高性能和稳定性。

    使用 MySQL 存储关联可以提供以下好处:

    • 持久化作业状态,即使客户端关闭后也能恢复。
    • 轻松管理和维护作业状态。
    • 与其他应用程序集成,例如通过 MySQL 查询作业状态。

    需要注意的是,使用外部存储管理作业状态可能会增加延迟和复杂性。因此,在选择此方法之前,请仔细考虑应用程序的要求和限制。

    2024-02-27 18:25:41
    赞同 展开评论 打赏
  • 你把表元数据信息存储在hivecatalog中就可以了,然后启动sql-client在初始化文件中使用catalog就可以了——该回答整理自钉群“Flink CDC 社区”

    2023-02-06 20:46:53
    赞同 展开评论 打赏
  • 这个是不具有持久化存储的,因此您在关闭客户端或集群时,job 会丢失。如果需要持久化存储,可以考虑在客户端持久化 job 状态或者使用阿里云实时计算中的存储模块(如HDFS或OSS)来持久化 job 状态。

    2023-02-06 17:00:39
    赞同 展开评论 打赏

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

相关产品

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

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