如何长期保留Apache Flink日志及作业历史记录?
Apache Flink 1.11.3 作业历史保留时间配置方案
Flink 1.11.3版本中已完成/失败作业的历史清理规则由JobManager、HistoryServer两类组件的参数共同控制,可通过调整以下参数实现7-10天的历史留存需求:
一、核心配置参数
1. JobManager 侧配置
如果未部署独立的HistoryServer,作业历史默认仅暂存在JobManager内存中,默认1小时就会被清理,需调整以下参数:
- 首先必须配置归档持久化路径:
jobmanager.archive.fs.dir,指定HDFS、S3等分布式文件系统的可访问路径,作业结束后相关日志、指标等归档数据会持久化存储到该路径,避免JobManager重启导致历史丢失。 - 内存中作业记录过期时间:
jobstore.expiration-time,单位为毫秒,默认值为3600000(即1小时),需要保留7天可设置为604800000,保留10天可设置为864000000。 - 内存中作业记录最大容量:
jobstore.max-capacity,默认值为1000,如果单日作业量超过这个值,需要同步调大该参数,避免作业记录未到过期时间就被新记录挤出。
2. HistoryServer 侧配置
生产环境建议部署独立的Flink HistoryServer实现长期稳定的作业历史查询,对应配置如下:
- 归档路径配置:
historyserver.archive.fs.dir,需要和上面jobmanager.archive.fs.dir的参数值完全一致,HistoryServer会从该路径拉取所有归档的作业历史。 - 过期清理开关:
historyserver.archive.clean-expired-jobs,设置为true开启归档作业的自动清理能力。 - 归档作业留存时间:
historyserver.archive.job-ttl,支持时间单位后缀ms/s/m/h/d,保留7天设置为7d,保留10天设置为10d即可,默认值为0代表永久留存。
二、配置生效方式
- 单作业生效:提交作业时通过参数指定即可,示例命令如下:
flink run -Djobmanager.archive.fs.dir=hdfs:///flink/archive \ -Djobstore.expiration-time=604800000 \ /path/to/your/job.jar
- 集群全局生效:将上述参数添加到Flink部署目录下的
conf/flink-conf.yaml配置文件中,重启JobManager、HistoryServer组件后生效。
注意:如果仅调整
jobstore.expiration-time而不配置持久化归档路径,JobManager重启后所有历史作业记录会全部丢失,且内存存储的历史记录上限受JobManager内存大小限制,长期留存强烈建议搭配分布式归档路径+HistoryServer使用,同时需提前评估归档路径的存储容量是否满足多天的作业数据存储需求。
内容的提问来源于stack exchange,提问作者Joseph D
相关产品推荐
相关产品推荐

