背景:1.flink 集群模式 standalone HA ,共三台,zk选举jobmanager,1 active 1 standby 2.文件系统由于公司原因,没有用hdfs,用的本地文件系统 3.backend用的增量rocksdb
配置情况:
进程分布情况如下:
问题:checkpoint数据在01(01是主jobmanager)上占用很小,但在02、03节点增长特别快,目前已占用数据盘90%的存储。 但由于使用的是增量rocksdb,不敢随意删chekpoint数据,想问问大佬们: 1.是否有办法让flink自动清理过期checkpoint,还是只能通过加磁盘方式解决? 2.我一直认为checkpoint数据是由主jobmanager触发写的,那么在当前情况应该只有01节点会写入checkpoint(本地磁盘),为什么02、03节点也会写入checkpoint,而且写入量比01大那么多?*来自志愿者整理的flink邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
针对您的问题,我将逐一进行解答:
自动清理过期checkpoint: Flink确实提供了自动清理checkpoint的机制。您可以通过配置state.checkpoints.retention.time
来设定checkpoint保留的时间长度,超出这个时间的checkpoint将会被自动删除。默认情况下,Flink会保留最近的1个checkpoint(如果配置了高可用,还会额外保留 standby JobManager 上的一个checkpoint),但不会根据时间自动删除。要启用基于时间的自动清理,您需要在Flink的配置文件(如flink-conf.yaml
)中设置如下参数:
state.checkpoints.retention.time: 5d # 例如,设置为保留5天
这样,所有超过5天的checkpoint会被自动清理。请注意,此设置对HA模式下的standby JobManager上的checkpoint同样有效。
关于02、03节点也写入checkpoint的问题: 在Flink的Standalone HA模式下,虽然只有active的JobManager负责触发checkpoint操作,但是task managers(运行在各个节点上)会各自保存它们所处理的数据的状态快照,这些状态快照就是checkpoint数据的一部分。因此,每个运行task manager的节点(即01、02、03)都会在其本地存储中保存与自己相关的checkpoint数据。由于您使用的是增量RocksDB作为state backend,它在处理大量状态更新时可能会产生较多的数据变化记录,这可能是导致02、03节点磁盘占用大的原因。
另外,如果某些特定任务或operator在02、03节点上有更大量的状态更新,或者因为网络、资源分配不均等原因,也可能造成这些节点上的checkpoint数据量异常增大。检查作业的执行计划和监控各task manager的负载情况,可能有助于定位具体原因。
综上所述,通过合理配置checkpoint保留策略可以解决长期存储空间占用问题,而对于不同节点checkpoint数据量差异较大的问题,则需要进一步分析作业的执行细节和资源分配情况。