1. 为什么需要 History Server
在生产环境中,我们常遇到这样的困境:一旦集群关闭,Web UI 上的作业页面就消失了,再也无法回看 DAG 图、算子指标、异常堆栈或当时的配置信息。这时候,History Server 的价值就体现出来了。
它不仅能展示 JobManager 归档下来的已完成作业状态,还能提供统一的'历史作业'入口,方便上线前后对比或参数变更复盘。更重要的是,它支持对接外部系统,通过 API 拉取作业归档数据,满足监控、运维或审计平台的需求。
2. 核心工作机制
整个链路其实很清晰:JobManager 负责'归档',History Server 负责'展示'。
当作业结束时,JobManager 会把归档信息写入文件系统目录(可以是 HDFS 或对象存储)。History Server 作为独立进程,定期轮询这个目录,发现新归档就下载到本地缓存,然后对外提供 Web UI 和 REST API 查询。
这里有个关键点:归档目录必须是共享文件系统。如果用对象存储(如 S3/OSS/GCS/Azure),记得提前安装对应的 Flink filesystem 插件。
3. 启停方式与默认端口
History Server 目前只能以 standalone 方式运行,用脚本管理即可:
# 启动或停止 HistoryServer
bin/historyserver.sh start|start-foreground|stop
默认绑定 localhost,监听端口是 8082。
4. 核心配置:两端都要配
4.1 JobManager 侧:指定归档位置
在 Flink 配置文件中设置归档目录,作业结束后会自动上传到这里:
# Directory to upload completed job information
jobmanager.archive.fs.dir: hdfs:///completed-jobs
4.2 History Server 侧:监控与缓存
History Server 需要知道去哪里找文件,以及缓存在哪:
# Monitor the following directories for completed jobs
historyserver.archive.fs.dir: hdfs:///completed-jobs
# Refresh every 10 seconds
historyserver.archive.fs.refresh-interval: 10000
# Local cache directory for downloaded archives
historyserver.web.tmpdir: /path/to/local/tmpdir
注意:
historyserver.archive.fs.dir支持逗号分隔多个目录,适合多集群汇总。refresh-interval太小会增加 FS 压力,太大则历史作业更新慢,一般 10s~60s 根据规模调整。web.tmpdir是本地缓存,归档多了容易膨胀,要注意磁盘清理策略。
5. 日志集成:打通排障闭环
Flink 本身不归档日志,但 History Server 可以生成日志 URL 模板,点击直接跳转到你们已有的日志系统:
# HistoryServer will replace <jobid> with the relevant job id
historyserver.log.jobmanager.url-pattern: http://my.log-browsing.url/<jobid>
# HistoryServer will replace <jobid> and <tmid>
historyserver.log.taskmanager.url-pattern: http://my.log-browsing.url/<jobid>/<tmid>
建议把这里对接到日志检索入口,形成'指标页 → 日志页'的闭环体验。
6. REST API:用 JSON 接入平台
所有请求形如 http://hostname:8082/。常用接口包括 /config、/jobs/overview、/jobs/ 及其下的异常、配置、顶点信息等。

