开发者社区> 问答> 正文

目前我们在调研checkpoint 跨机房容灾的方案

目前我们在调研checkpoint 跨机房容灾的方案,目标是把checkpoint备份到hdfs2上,当hdfs1故障时,可以快速从hdfs2恢复flink作业。 本来我们打算使用hadoop的distcp命令定期把hdfs1上的checkpoint备份到hdfs2上,但是运维同学反馈distcp命令会报错,因为checkpoint路径下文件变动太频繁。 1.想问下大家在这种文件频繁创建的场景下,是如何做hdfs间的增量文件拷贝的,有没有现成的工具或成熟的方案? 2.改造flink代码,支持checkpoint异步双写是否是一个可行的方案?

*来自志愿者整理的flink邮件归档

展开
收起
游客nnqbtnagn7h6s 2021-12-06 20:02:14 488 0
1 条回答
写回答
取消 提交回答
  • 你好,这个需求看上去是一个通用的需求(可以是任何的文件进行灾备,刚好这里是 checkpoint 文件),对 hdfs distcp 的限制不太了解,不过如果你要是想做这件事情,能否尝试定时的把文件先 copy 到本集群,然后 copy 后的文件通过 distcp 拷贝到其他集群。

    另外改造 flink 代码支持 checkpoint 异步双写这从理论上来说是可以的,不过做的事情可能也不简单,粗略想了下需要:1)tm 端能够双写,可以参考现在开启 localrecovery 的双写(本地和远程)的实现[1] -- 另外需要考虑异常情况;2)jm 端需要考虑 checkpoint meta 的格式,以及存储,meta 也需要存两份(如果只存一份的话,那么 hdfs 异常了也无法恢复),这里面异常的情况也需要仔细考虑;3)恢复的时候从哪个集群进行恢复,这一步可能和第 2 步中的实现有一定的关系。整个过程中比较麻烦的是需要考虑各种异常情况如何解决。

    另外多问一句,你们 checkpoint 跨机房容灾需求大吗?还是说仅仅是调研一下呢? savepoint 能否支持你们的需求呢?在 1.11 中 savepoint 能够很好的支持跨集群迁移[2],就是 savepoint 比 checkpoint 慢很多

    [1] https://github.com/apache/flink/blob/481c509f2e034c912e5e5d278e0b3f3d29a21f2b/flink-runtime/src/main/java/org/apache/flink/runtime/state/CheckpointStreamWithResultProvider.java#L91 [2] https://issues.apache.org/jira/browse/FLINK-5763

    *来自志愿者整理的flink邮件归档

    2021-12-06 21:29:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于阿里云构建同城跨可用区容灾的演练runbook 立即下载
云上跨可用区容灾和异地多活 立即下载
云迁移与云容灾-基于混合云架构的迁移和灾备 立即下载