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

麻烦问下Flink CDC中加个allowNonRestoredState 这个参数, 不会导致?

麻烦问下Flink CDC中加个allowNonRestoredState 这个参数, 不会导致数据从全量开始消费吧?

展开
收起
真的很搞笑 2023-07-02 12:01:49 429 0
3 条回答
写回答
取消 提交回答
  • 在 Flink CDC 中添加 allowNonRestoredState 参数不会导致数据从全量开始消费。

    allowNonRestoredState 参数主要用于处理 Flink 任务重启后由于没有检查点而丢失的状态。具体来说,它会做以下两件事情:

    1. 允许恢复时忽略未知的(没有在检查点中保存的)状态。 2. 在状态初始化时,使用 CDC 基于源数据重新计算状态。

    通过这两个步骤,即使之前的状态丢失了,重新计算依然可以获得准确的最新状态。因此,不会出现数据重复的问题。

    具体的工作流程如下:

    1. 在 CDC 任务重启之前,可能已经处理了一部分数据并形成了状态。 2. 由于没有检查点,这部分状态丢失了。 3. 设置了 allowNonRestoredState 参数后,任务重启时会忽略不存在的状态。 4. 然后,通过同步源端的数据重新计算状态。 5. 最终的状态只包含已经消费过的数据,不会有重复的数据。

    因此,allowNonRestoredState 参数不会导致数据重复,反而有助于处理之前已经处理过但状态丢失的数据。

    2023-07-30 13:02:24
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    允许非恢复状态(allowNonRestoredState)在Flink CDC中,并不会导致数据重复的问题。
    这个参数主要是用来处理Flink任务重启后,由于没有检查点而丢失的状态。
    allowNonRestoredState 具体做了以下两件事:
    允许恢复时忽略未知的(没有在检查点中保存的)状态。
    当状态被初始化时,使用 CDC 来基于源数据重新计算状态。
    这两点保证了,即使状态在之前丢失了,通过重新计算也可以获得准确的最新状态。
    所以数据不会出现重复,具体来说:
    CDC任务重启前,可能已经有一部分数据处理过了,形成了状态
    但由于没有检查点,这部分状态丢失了
    设置 allowNonRestoredState 后,任务重启会忽略不存在的状态
    然后,通过同步源端数据,来重新计算状态
    最终的状态只包含已经消费过的数据,不会有重复
    总的来说,allowNonRestoredState 并不会导致数据重复,反而有助于处理任务曾经处理过但状态丢失的那部分数据。
    希望以上信息能为你解释清楚此参数功能!如果还有其他问题,欢迎继续交流。

    2023-07-30 10:54:52
    赞同 展开评论 打赏
  • 看你cdc拉取的是全量还是增了,一般这种的的 都已经是实时拉取增量数据了,此回答整理自钉群“Flink CDC 社区”

    2023-07-02 12:20:33
    赞同 展开评论 打赏

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

相关产品

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

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