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

你们公司项目中flink任务取消检查点也是使用这个策略吗?

是使用delete还是retain呢image.png

展开
收起
雪哥哥 2022-10-30 10:04:45 799 0
14 条回答
写回答
取消 提交回答
  • 阿里云 Flink 任务的取消检查点策略可以通过配置来进行控制。具体来说,可以通过设置 state.checkpoints.num-retained 参数来控制保留的检查点数量。该参数指定了保留最近的多少个检查点,超出该数量的检查点将被删除。

    如果要取消所有的检查点,可以将 state.checkpoints.num-retained 参数设置为 0。此时,所有的检查点都会被删除。

    在删除检查点时,可以选择使用 delete 还是 retain 策略。如果使用 delete 策略,那么所有的检查点都会被删除;如果使用 retain 策略,那么只会保留指定数量的最新检查点,其余的检查点会被删除。

    在默认情况下,阿里云 Flink 任务使用的是 delete 策略。如果需要使用 retain 策略,可以通过设置 state.checkpoints.cleanup-mode 参数来进行配置。该参数有两个可选值:

    • delete: 使用 delete 策略,删除所有超出保留数量的检查点。
    • retain: 使用 retain 策略,保留最近的指定数量的检查点,超出该数量的检查点会被删除。

    例如,可以通过以下方式配置使用 retain 策略,保留最近的 2 个检查点:

    // 创建 Flink StreamExecutionEnvironment
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    
    // 设置检查点配置
    env.enableCheckpointing(60000);
    env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
    env.getCheckpointConfig().setMinPauseBetweenCheckpoints(30000);
    env.getCheckpointConfig().setCheckpointTimeout(10000);
    env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
    env.getCheckpointConfig().setCleanupMode(CleanupMode.RETAIN_ON_CANCELLATION);
    env.getCheckpointConfig().setCheckpointStorage("hdfs://localhost:9000/flink/checkpoints");
    env.getCheckpointConfig().setCheckpointInterval(60000);
    env.getCheckpointConfig().setMinPauseBetweenCheckpoints(30000);
    env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
    env.getCheckpointConfig().setRetainExternalizedCheckpointsOnCancellation(true);
    env.getCheckpointConfig().setNumberOfRetainedCheckpoints(2);
    

    在上面的例子中,使用 setCleanupMode 方法设置了 cleanup mode 为 CleanupMode.RETAIN_ON_CANCELLATION,表示在任务取消时保留检查点。同时,使用 setNumberOfRetainedCheckpoints 方法设置了保留的检查点数量为 2,表示只保留最近的 2 个检查点。

    2023-05-06 23:29:25
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云实时计算 Flink 中,取消一个检查点时,通常使用 "delete" 命令来删除所有与该检查点相关的 Checkpoint 文件,以确保 Flink 不会再将该检查点用作恢复数据的依据。但是,有时也可能需要保留某些 Checkpoint 文件以备后用,这时就可以使用 "retain" 命令来选择保留某些指定的 Checkpoint 文件。具体来说,"delete" 命令用于彻底删除特定的检查点,而 "retain" 命令则用于保留某些 Checkpoint 文件,以便在需要的时候使用。

    "delete" 命令会删除所有与请求检查点相关的 Checkpoint 文件,这些文件是存储检查点数据和元数据的关键。使用此命令时需要小心,确保不会意外删除满足恢复需求的有效 Checkpoint 文件。

    "retain" 命令则选择性地保留某些 Checkpoint 文件,以便在需要进行故障恢复时使用。不像 "delete" 命令那样, 它并不会删除所有与该检查点相关的文件,而是仅保留指定的 Checkpoint 文件。即使在删除检查点之后,仍然可以使用保留的 Checkpoint 文件进行恢复。

    因此,当您需要删除某个检查点的所有文件时,请使用 "delete" 命令,而当您希望保留某些特定的 Checkpoint 文件时,请使用 "retain" 命令。

    2023-05-04 22:50:22
    赞同 展开评论 打赏
  • 当您在 Flink 中取消一个检查点时,可以选择以下两种不同的策略:delete 和 retain。

    • delete 策略

    使用 delete 策略时,Flink 会删除该检查点和对应的状态数据,这样可以释放状态后端存储中占用的空间。使用 delete 策略时需要注意,如果之后需要使用该检查点来进行恢复操作,该检查点将不能再被使用。因此,仅当您确定不需要该检查点并且需要释放空间时,才使用 delete 策略。

    示例代码:

    // 取消任务检查点时使用 delete 策略的代码

    env.getCheckpointConfig().enableExternalizedCheckpoints(EnabledExternalizedCheckpoints.DELETE_ON_CANCELLATION);
    
    
    • retain 策略

    使用 retain 策略时,Flink 会将该检查点标记为被已删除,并保留状态数据。这样可以保留该检查点以供之后进行恢复操作。通常,在开发和调试过程中,retain 策略比较适用,因为可以让您随时停止和恢复任务,而无需重新运行整个任务。

    示例代码:

    // 取消任务检查点时使用 retain 策略的代码

    env.getCheckpointConfig().enableExternalizedCheckpoints(EnabledExternalizedCheckpoints.RETAIN_ON_CANCELLATION);
    
    

    综上所述,如果您不需要恢复该检查点并且确定需要释放空间,则使用 delete 策略;如果您需要在之后进行恢复操作,则使用 retain 策略。

    2023-05-02 08:08:37
    赞同 1 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    这个需要结合你的实际情况来选择了,你要明白不管选择是使用delete还是retain策略来处理已经存在的检查点数据都存在一些风险,你需要评估。 如果您选择使用delete策略,那么在禁用检查点后,Flink将删除所有已经存在的检查点数据。这意味着,如果任务失败,Flink将无法恢复任务的状态。 如果您选择使用retain策略,那么在禁用检查点后,Flink将保留所有已经存在的检查点数据。这意味着,如果任务失败,Flink可以使用最近的检查点数据来恢复任务的状态。但是,这也意味着检查点数据可能会占用大量的存储空间,因此您需要定期清理旧的检查点数据。 选择delete还是retain策略取决于您的具体需求和情况。如果您的任务状态可以通过其他方式进行恢复,并且您需要释放存储空间,则可以选择delete策略。如果您需要保留最近的检查点数据以便在任务失败时进行恢复,则可以选择retain策略。

    2023-04-27 12:10:02
    赞同 展开评论 打赏
  • 从事java行业8年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    Flink取消任务checkpoint有两种策略:ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION 和 ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION,这两种策略有各自的含义。其中:

    DELETE_ON_CANCELLATION:仅当作业失败时,作业的 Checkpoint 才会被保留用于任务恢复。当作业取消时,Checkpoint 状态信息会被删除,因此取消任务后,不能从 Checkpoint 位置进行恢复任务。

    RETAIN_ON_CANCELLATION:当作业手动取消时,将会保留作业的 Checkpoint 状态信息。注意,这种情况下,需要手动清除该作业保留的 Checkpoint 状态信息,否则这些状态信息将永远保留在外部的持久化存储中。

    具体使用哪种策略还需要根据实际业务来决定。

    2023-04-26 15:11:32
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    一般来说,取消检查点可能会对任务的可靠性和容错性产生负面影响。因此,建议在使用Flink时保留检查点,以确保任务能够在失败时恢复并继续执行。在删除检查点时,可能会导致任务在失败时无法恢复,因此不建议使用。

    2023-04-26 12:27:53
    赞同 展开评论 打赏
  • 这个问题的答案需要考虑具体情况,使用哪种清理策略(delete 还是 retain)由您公司的实际需求来决定。

    如果使用 RETAIN_ON_CANCELLATION 策略,则在任务被取消时不会删除检查点数据,所有检查点数据都可以从分布式文件系统获取。这对于调试和故障排除非常有用,因为您可以重启已经取消的任务并重新读取以前的确切状态,而无需再次运行长时间的计算过程。

    当然,保留检查点可能会占用大量存储空间,对于一些较小的应用程序,这也许不是问题,但对于处理大规模数据时则需要谨慎考虑。最好制定明确的策略来管理和限制检查点的生命周期。例如定期清理旧检查点或者设置检查点保存时间等。

    与之相反,使用 DELETE_ON_CANCELLATION 策略,Flink 会在任务被取消时立即删除所有检查点数据。这意味着您不能恢复任何先前的执行状态,并且需要从头开始重新处理数据。但是,清理掉不必要的检查点可能会释放出宝贵的磁盘空间,并提高整体性能。

    综上所述,在选择策略时应根据实际业务需求、存储容量、性能等方面进行综合考虑。

    2023-04-24 18:04:54
    赞同 展开评论 打赏
  • 在Flink任务中,取消checkpoint是一个比较重要的配置。它控制了当checkpoint失败或超时时,Flink如何处理已完成的子checkpoint。 Flink目前提供了三种取消checkpoint的策略: 1. delete:删除所有已完成的子checkpoint。这是默认策略,可以提供精确一次的语义保证,但是会丢失checkpoint期间产生的所有状态和进度。 2. retain:保留所有已完成的子checkpoint。这可以最大限度地避免状态丢失,但是同一个checkpoint范围内可能有多个checkpoint完成,导致暂时无法恢复。需要手动清理多余的checkpoint。
    3. deleteRetained:删除所有已完成的子checkpoint,除非存在还没有被 evictor 清理的旧 checkpoint。在这种情况下,会保留最新的已完成checkpoint,并删除其他所有checkpoint。这在状态丢失和checkpoint redundancy之间进行权衡。 在很多Flink实际应用中,会根据场景需要选择不同的策略: 1. 如果状态容错性要求很高,且可以容忍checkpoint期间的小幅状态丢失,会选择delete策略。以获得精确一次的语义。 2. 如果不能接受因checkpoint丢失导致的任何状态丢失,会选择retain策略。然后通过外部作业或其他机制定期清理多余的checkpoint。 3. 如果可以接受少量状态丢失,同时也不想保留太多的checkpoint,会选择deleteRetained策略。这是一个折中的方案。 所以,对于场景的具体需要,需要权衡状态丢失的容忍度,以及checkpoint redundancy带来的复杂度,选择适当的checkpoint取消策略。 在我们的很多Flink项目中,也会根据不同的应用选择不同的策略。对于一致性要求高但可以接受少量状态丢失的场景,会选择deleteRetained策略。而对于几乎零状态丢失的场景,会选择retain策略,通过定期清理的方式减小redundancy。 总之,checkpoint取消策略的选择取决于具体应用场景,需要在状态丢失和checkpoint redundancy之间进行权衡。

    2023-04-24 15:50:17
    赞同 展开评论 打赏
  • 是的,您提到的 enableExternalizedCheckpoints 方法可以用于控制当 Flink 作业被取消时是否删除 Checkpoint 数据。具体来说,在调用 enableExternalizedCheckpoints 方法时,可以使用 CheckpointConfig.ExternalizedCheckpointCleanup 枚举类型来指定 Checkpoint 数据的清理策略,例如:

    env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
    

    上述示例中,当 Flink 作业被取消时,我们使用了 RETAIN_ON_CANCELLATION 策略,即保留 Checkpoint 数据。这意味着,即使作业被取消,之前产生的 Checkpoint 数据也会被保留,以便在下次重新启动作业时使用。如果您希望在取消作业时自动删除 Checkpoint 数据,可以使用 DELETE_ON_CANCELLATION 策略,例如:

    env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION);
    

    需要注意的是,无论是使用何种清理策略,Flink 都会在作业正常终止时自动清理 Checkpoint 数据。因此,只有在作业被取消时才需要考虑使用这些策略。

    2023-04-24 11:24:51
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    关于 Flink 任务的取消检查点,使用的策略通常是清除或保留某个检查点(checkpoint),具体策略的选择取决于您的需求和应用场景。

    如果需要立即释放磁盘空间并删除检查点,可以使用 delete 策略。具体来说,在 Flink 的 Web UI 或命令行界面中,通过执行“删除”操作即可删除指定的检查点。例如,在 Web UI 中,可以选中一个检查点,然后单击“删除”按钮来删除检查点。

    如果希望在某些情况下保留检查点,以便在未来恢复任务状态,可以使用 retain 策略。该策略允许您保留一定数量的检查点,并自动删除旧的检查点,从而节省磁盘空间。在 Flink 中,可以通过以下参数配置保留最新几个检查点:

    yaml

    state.checkpoints.num-retained:

    其中 表示要保留的检查点数量。

    2023-04-24 09:42:52
    赞同 展开评论 打赏
  • 全栈JAVA领域创作者

    一般来说,在Flink任务取消时,可以使用两种策略来处理检查点数据:delete和retain。

    delete:使用该策略时,Flink将删除所有已完成的检查点数据,释放相应的存储空间。如果您使用的是分布式文件系统(如HDFS),则Flink会使用HDFS中的文件删除机制来删除检查点数据。 retain:使用该策略时,Flink将保留所有已完成的检查点数据,不删除它们。这样,您可以在需要时重新启动任务,并从以前的检查点数据中恢复任务状态。 选择使用哪种策略取决于您的需求和环境。如果您的任务需要频繁启动和停止,或者需要快速恢复状态,那么使用retain策略可能更合适。如果您的任务不需要频繁启动和停止,或者需要释放存储空间,那么使用delete策略可能更合适。

    需要注意的是,不管您选择哪种策略,都需要确保Flink任务在取消检查点时不会丢失数据。建议您在选择策略时,考虑到数据的完整性和可靠性,并在实际生产环境中进行充分的测试和验证。

    2023-04-23 20:13:46
    赞同 展开评论 打赏
  • 热爱开发

    一般来说,在Flink任务中,如果需要取消检查点,则可以在取消任务时选择是删除检查点还是保留检查点。

    使用DELETE_ON_CANCELLATION策略表示在取消任务时同时删除所有的检查点数据。这种策略适用于只关注最近的重启点,并且不需要恢复之前检查点的应用场景。

    使用RETAIN_ON_CANCELLATION策略表示在取消任务时保留最后一个检查点,以便在下次重启任务时恢复任务状态。这种策略适用于需要备份和恢复多个检查点的应用场景。

    在实际项目中,应该根据具体的业务需求和系统规模选择最合适的检查点取消策略。

    2023-04-23 16:52:33
    赞同 展开评论 打赏
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

    在实际项目中,Flink 任务取消时是否删除检查点文件是根据具体需求来定的。通常情况下,如果您需要重启任务并且从最近一次检查点恢复,则保留检查点是更加合理的选择;但如果您不需要从检查点进行恢复,或者检查点文件占用了大量磁盘空间,那么删除检查点文件是更加合理的选择。

    以下是一些常见的 Flink 取消检查点时是否删除检查点文件的情况:

    保留检查点文件:当您需要重启任务并从最近一次检查点恢复时,保留检查点文件会使得任务的恢复速度更快。如果您的任务有状态,而且检查点文件的大小不是很大,那么保留检查点文件可能是更好的选择。

    删除检查点文件:如果您不需要从检查点进行恢复,或者由于某种原因需要释放磁盘空间,那么删除检查点文件可能是更好的选择。如果您正在使用本地文件系统作为检查点存储后端,并且您没有将检查点转移到可扩展的分布式文件系统(如 HDFS 或 S3)中,那么检查点文件的大小可能会对磁盘空间造成压力,这时删除检查点文件可能是更好的选择。

    需要注意的是,如果您在取消任务时选择删除检查点文件,将无法从该点进行恢复。因此,在删除检查点文件之前,请确保不再需要从该检查点进行恢复,并且已经在其他位置备份了必要的数据。

    2023-04-23 16:51:27
    赞同 展开评论 打赏
  • 对于已经启用了检查点的任务,我们一般会使用“cancel with savepoint”的方式来取消任务并生成保存点,并将保存点的 retention 配置为 delete。这种方式可以保证任务在取消时不会丢失状态数据,并且可以避免生成过多无用的保存点,释放存储空间。

    2023-04-23 16:33:58
    赞同 展开评论 打赏
滑动查看更多

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

相关产品

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

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