Flink CDC里 Zookeeper的HA Flink standalone 集群,savepoint保存的是linux本地服务器地址,到恢复程序时,要每个taskmanager的服务器都要有这savepoint文件,否则一直报找不到savepoint地址
请问一定要每个taskmanager服务器都分发这个savepoint文件吗?一定要有dfs ?如果用linux本地目录呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Flink CDC场景中,使用Zookeeper实现高可用(HA)的Flink Standalone集群时,Savepoint文件的存储位置对作业恢复至关重要。如果Savepoint文件存储在Linux本地服务器目录,而TaskManager分布在不同的物理节点上,则可能会出现部分TaskManager无法找到Savepoint文件的问题。
用户的问题可以拆解为以下几点: 1. 是否需要将Savepoint文件分发到每个TaskManager所在的服务器? 2. 是否必须使用分布式文件系统(DFS)来存储Savepoint文件? 3. 如果使用Linux本地目录存储Savepoint文件,是否可行?
以下是基于知识库资料的详细解答。
是的,如果Savepoint文件存储在Linux本地目录,则需要确保每个TaskManager所在的服务器都能访问该文件。
原因如下: - Flink在恢复作业时,所有TaskManager都需要从Savepoint文件中读取状态数据。 - 如果Savepoint文件仅存储在某个特定的TaskManager服务器上,其他TaskManager无法访问该文件,就会导致恢复失败,并报错“找不到Savepoint地址”。
因此,为了避免这种问题,您可以选择以下两种解决方案: 1. 手动分发Savepoint文件:将Savepoint文件复制到每个TaskManager所在的服务器的相同路径下。 2. 使用分布式文件系统(DFS):将Savepoint文件存储在DFS中,所有TaskManager都可以通过统一的路径访问。
推荐使用分布式文件系统(DFS),但并非强制要求。
使用DFS的优势包括: - 集中存储:Savepoint文件存储在DFS中,所有TaskManager都可以通过统一的路径访问,无需手动分发文件。 - 高可用性:DFS通常具备高可用性和容错能力,能够避免单点故障。 - 扩展性:DFS支持大规模数据存储,适合处理大体积的Savepoint文件。
根据知识库资料,Flink支持将Savepoint文件存储在OSS Bucket或全托管存储中。这些存储类型本质上都是分布式文件系统,能够满足上述需求。
如果您坚持使用Linux本地目录存储Savepoint文件,则需要确保: - 所有TaskManager服务器上的Savepoint文件路径一致。 - Savepoint文件已手动分发到每个TaskManager所在的服务器。
可行,但不推荐。
使用Linux本地目录存储Savepoint文件存在以下限制和风险: - 手动分发成本高:每次创建Savepoint后,您需要手动将文件复制到每个TaskManager所在的服务器。 - 路径一致性要求高:所有TaskManager必须使用相同的文件路径访问Savepoint文件,否则会导致恢复失败。 - 单点故障风险:如果某个TaskManager服务器上的Savepoint文件丢失或损坏,作业恢复将失败。
根据知识库资料,Flink工作空间支持绑定OSS Bucket作为存储类型。OSS Bucket是一种分布式存储方案,能够有效解决上述问题。因此,建议优先使用OSS Bucket或其他DFS存储Savepoint文件。
state.backend.gemini.file.cache.type设置为LIMITED),将超出本地磁盘限制的State数据存储到DFS中。通过以上措施,您可以有效解决Savepoint文件存储和恢复的问题,确保Flink作业的高可用性和稳定性。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。