阿里云 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 个检查点。
在阿里云实时计算 Flink 中,取消一个检查点时,通常使用 "delete" 命令来删除所有与该检查点相关的 Checkpoint 文件,以确保 Flink 不会再将该检查点用作恢复数据的依据。但是,有时也可能需要保留某些 Checkpoint 文件以备后用,这时就可以使用 "retain" 命令来选择保留某些指定的 Checkpoint 文件。具体来说,"delete" 命令用于彻底删除特定的检查点,而 "retain" 命令则用于保留某些 Checkpoint 文件,以便在需要的时候使用。
"delete" 命令会删除所有与请求检查点相关的 Checkpoint 文件,这些文件是存储检查点数据和元数据的关键。使用此命令时需要小心,确保不会意外删除满足恢复需求的有效 Checkpoint 文件。
"retain" 命令则选择性地保留某些 Checkpoint 文件,以便在需要进行故障恢复时使用。不像 "delete" 命令那样, 它并不会删除所有与该检查点相关的文件,而是仅保留指定的 Checkpoint 文件。即使在删除检查点之后,仍然可以使用保留的 Checkpoint 文件进行恢复。
因此,当您需要删除某个检查点的所有文件时,请使用 "delete" 命令,而当您希望保留某些特定的 Checkpoint 文件时,请使用 "retain" 命令。
当您在 Flink 中取消一个检查点时,可以选择以下两种不同的策略:delete 和 retain。
使用 delete 策略时,Flink 会删除该检查点和对应的状态数据,这样可以释放状态后端存储中占用的空间。使用 delete 策略时需要注意,如果之后需要使用该检查点来进行恢复操作,该检查点将不能再被使用。因此,仅当您确定不需要该检查点并且需要释放空间时,才使用 delete 策略。
示例代码:
// 取消任务检查点时使用 delete 策略的代码
env.getCheckpointConfig().enableExternalizedCheckpoints(EnabledExternalizedCheckpoints.DELETE_ON_CANCELLATION);
使用 retain 策略时,Flink 会将该检查点标记为被已删除,并保留状态数据。这样可以保留该检查点以供之后进行恢复操作。通常,在开发和调试过程中,retain 策略比较适用,因为可以让您随时停止和恢复任务,而无需重新运行整个任务。
示例代码:
// 取消任务检查点时使用 retain 策略的代码
env.getCheckpointConfig().enableExternalizedCheckpoints(EnabledExternalizedCheckpoints.RETAIN_ON_CANCELLATION);
综上所述,如果您不需要恢复该检查点并且确定需要释放空间,则使用 delete 策略;如果您需要在之后进行恢复操作,则使用 retain 策略。
这个需要结合你的实际情况来选择了,你要明白不管选择是使用delete还是retain策略来处理已经存在的检查点数据都存在一些风险,你需要评估。 如果您选择使用delete策略,那么在禁用检查点后,Flink将删除所有已经存在的检查点数据。这意味着,如果任务失败,Flink将无法恢复任务的状态。 如果您选择使用retain策略,那么在禁用检查点后,Flink将保留所有已经存在的检查点数据。这意味着,如果任务失败,Flink可以使用最近的检查点数据来恢复任务的状态。但是,这也意味着检查点数据可能会占用大量的存储空间,因此您需要定期清理旧的检查点数据。 选择delete还是retain策略取决于您的具体需求和情况。如果您的任务状态可以通过其他方式进行恢复,并且您需要释放存储空间,则可以选择delete策略。如果您需要保留最近的检查点数据以便在任务失败时进行恢复,则可以选择retain策略。
Flink取消任务checkpoint有两种策略:ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION 和 ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION,这两种策略有各自的含义。其中:
DELETE_ON_CANCELLATION:仅当作业失败时,作业的 Checkpoint 才会被保留用于任务恢复。当作业取消时,Checkpoint 状态信息会被删除,因此取消任务后,不能从 Checkpoint 位置进行恢复任务。
RETAIN_ON_CANCELLATION:当作业手动取消时,将会保留作业的 Checkpoint 状态信息。注意,这种情况下,需要手动清除该作业保留的 Checkpoint 状态信息,否则这些状态信息将永远保留在外部的持久化存储中。
具体使用哪种策略还需要根据实际业务来决定。
一般来说,取消检查点可能会对任务的可靠性和容错性产生负面影响。因此,建议在使用Flink时保留检查点,以确保任务能够在失败时恢复并继续执行。在删除检查点时,可能会导致任务在失败时无法恢复,因此不建议使用。
这个问题的答案需要考虑具体情况,使用哪种清理策略(delete 还是 retain)由您公司的实际需求来决定。
如果使用 RETAIN_ON_CANCELLATION
策略,则在任务被取消时不会删除检查点数据,所有检查点数据都可以从分布式文件系统获取。这对于调试和故障排除非常有用,因为您可以重启已经取消的任务并重新读取以前的确切状态,而无需再次运行长时间的计算过程。
当然,保留检查点可能会占用大量存储空间,对于一些较小的应用程序,这也许不是问题,但对于处理大规模数据时则需要谨慎考虑。最好制定明确的策略来管理和限制检查点的生命周期。例如定期清理旧检查点或者设置检查点保存时间等。
与之相反,使用 DELETE_ON_CANCELLATION
策略,Flink 会在任务被取消时立即删除所有检查点数据。这意味着您不能恢复任何先前的执行状态,并且需要从头开始重新处理数据。但是,清理掉不必要的检查点可能会释放出宝贵的磁盘空间,并提高整体性能。
综上所述,在选择策略时应根据实际业务需求、存储容量、性能等方面进行综合考虑。
在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之间进行权衡。
是的,您提到的 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 数据。因此,只有在作业被取消时才需要考虑使用这些策略。
关于 Flink 任务的取消检查点,使用的策略通常是清除或保留某个检查点(checkpoint),具体策略的选择取决于您的需求和应用场景。
如果需要立即释放磁盘空间并删除检查点,可以使用 delete 策略。具体来说,在 Flink 的 Web UI 或命令行界面中,通过执行“删除”操作即可删除指定的检查点。例如,在 Web UI 中,可以选中一个检查点,然后单击“删除”按钮来删除检查点。
如果希望在某些情况下保留检查点,以便在未来恢复任务状态,可以使用 retain 策略。该策略允许您保留一定数量的检查点,并自动删除旧的检查点,从而节省磁盘空间。在 Flink 中,可以通过以下参数配置保留最新几个检查点:
yaml
state.checkpoints.num-retained:
其中 表示要保留的检查点数量。
一般来说,在Flink任务取消时,可以使用两种策略来处理检查点数据:delete和retain。
delete:使用该策略时,Flink将删除所有已完成的检查点数据,释放相应的存储空间。如果您使用的是分布式文件系统(如HDFS),则Flink会使用HDFS中的文件删除机制来删除检查点数据。 retain:使用该策略时,Flink将保留所有已完成的检查点数据,不删除它们。这样,您可以在需要时重新启动任务,并从以前的检查点数据中恢复任务状态。 选择使用哪种策略取决于您的需求和环境。如果您的任务需要频繁启动和停止,或者需要快速恢复状态,那么使用retain策略可能更合适。如果您的任务不需要频繁启动和停止,或者需要释放存储空间,那么使用delete策略可能更合适。
需要注意的是,不管您选择哪种策略,都需要确保Flink任务在取消检查点时不会丢失数据。建议您在选择策略时,考虑到数据的完整性和可靠性,并在实际生产环境中进行充分的测试和验证。
一般来说,在Flink任务中,如果需要取消检查点,则可以在取消任务时选择是删除检查点还是保留检查点。
使用DELETE_ON_CANCELLATION策略表示在取消任务时同时删除所有的检查点数据。这种策略适用于只关注最近的重启点,并且不需要恢复之前检查点的应用场景。
使用RETAIN_ON_CANCELLATION策略表示在取消任务时保留最后一个检查点,以便在下次重启任务时恢复任务状态。这种策略适用于需要备份和恢复多个检查点的应用场景。
在实际项目中,应该根据具体的业务需求和系统规模选择最合适的检查点取消策略。
在实际项目中,Flink 任务取消时是否删除检查点文件是根据具体需求来定的。通常情况下,如果您需要重启任务并且从最近一次检查点恢复,则保留检查点是更加合理的选择;但如果您不需要从检查点进行恢复,或者检查点文件占用了大量磁盘空间,那么删除检查点文件是更加合理的选择。
以下是一些常见的 Flink 取消检查点时是否删除检查点文件的情况:
保留检查点文件:当您需要重启任务并从最近一次检查点恢复时,保留检查点文件会使得任务的恢复速度更快。如果您的任务有状态,而且检查点文件的大小不是很大,那么保留检查点文件可能是更好的选择。
删除检查点文件:如果您不需要从检查点进行恢复,或者由于某种原因需要释放磁盘空间,那么删除检查点文件可能是更好的选择。如果您正在使用本地文件系统作为检查点存储后端,并且您没有将检查点转移到可扩展的分布式文件系统(如 HDFS 或 S3)中,那么检查点文件的大小可能会对磁盘空间造成压力,这时删除检查点文件可能是更好的选择。
需要注意的是,如果您在取消任务时选择删除检查点文件,将无法从该点进行恢复。因此,在删除检查点文件之前,请确保不再需要从该检查点进行恢复,并且已经在其他位置备份了必要的数据。
对于已经启用了检查点的任务,我们一般会使用“cancel with savepoint”的方式来取消任务并生成保存点,并将保存点的 retention 配置为 delete。这种方式可以保证任务在取消时不会丢失状态数据,并且可以避免生成过多无用的保存点,释放存储空间。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。