麻烦问下Flink CDC中加个allowNonRestoredState 这个参数, 不会导致数据从全量开始消费吧?
在 Flink CDC 中添加 allowNonRestoredState
参数不会导致数据从全量开始消费。
allowNonRestoredState
参数主要用于处理 Flink 任务重启后由于没有检查点而丢失的状态。具体来说,它会做以下两件事情:
1. 允许恢复时忽略未知的(没有在检查点中保存的)状态。 2. 在状态初始化时,使用 CDC 基于源数据重新计算状态。
通过这两个步骤,即使之前的状态丢失了,重新计算依然可以获得准确的最新状态。因此,不会出现数据重复的问题。
具体的工作流程如下:
1. 在 CDC 任务重启之前,可能已经处理了一部分数据并形成了状态。 2. 由于没有检查点,这部分状态丢失了。 3. 设置了 allowNonRestoredState
参数后,任务重启时会忽略不存在的状态。 4. 然后,通过同步源端的数据重新计算状态。 5. 最终的状态只包含已经消费过的数据,不会有重复的数据。
因此,allowNonRestoredState
参数不会导致数据重复,反而有助于处理之前已经处理过但状态丢失的数据。
允许非恢复状态(allowNonRestoredState)在Flink CDC中,并不会导致数据重复的问题。
这个参数主要是用来处理Flink任务重启后,由于没有检查点而丢失的状态。
allowNonRestoredState 具体做了以下两件事:
允许恢复时忽略未知的(没有在检查点中保存的)状态。
当状态被初始化时,使用 CDC 来基于源数据重新计算状态。
这两点保证了,即使状态在之前丢失了,通过重新计算也可以获得准确的最新状态。
所以数据不会出现重复,具体来说:
CDC任务重启前,可能已经有一部分数据处理过了,形成了状态
但由于没有检查点,这部分状态丢失了
设置 allowNonRestoredState 后,任务重启会忽略不存在的状态
然后,通过同步源端数据,来重新计算状态
最终的状态只包含已经消费过的数据,不会有重复
总的来说,allowNonRestoredState 并不会导致数据重复,反而有助于处理任务曾经处理过但状态丢失的那部分数据。
希望以上信息能为你解释清楚此参数功能!如果还有其他问题,欢迎继续交流。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。