Flink History Server 集群停了也能看已完成作业的 Web UI 与 REST 数据

1. History Server 能解决什么问题

典型痛点

  • 集群关闭后,Web UI 上的作业页面消失,无法回看 DAG、算子指标、异常栈、配置
  • 需要统一的“历史作业”入口做复盘对比(上线前后、参数变更前后)
  • 需要对接外部系统(监控、运维平台、审计平台)通过 API 拉取作业归档数据

History Server 提供能力

  • 展示 JobManager 归档下来的已完成作业状态与统计信息
  • 提供 REST API(返回 JSON)便于系统集成
  • 支持跳转到你们已有的日志平台(Log Integration)

2. 工作机制:JM 负责“归档”,History Server 负责“展示”

整体链路很清晰:

1)JobManager 在作业结束时,把“作业归档信息”写到一个文件系统目录
2)History Server 定期轮询这个目录,发现新归档就下载到本地缓存
3)History Server 对外提供 Web UI 与 REST API 查询这些已归档作业

这里的关键点是:归档目录是“文件系统目录”,可以是 HDFS,也可以是对象存储(前提是你已安装对应的 Flink filesystem 插件,比如 S3/OSS/GCS/Azure 等)。

3. 启停方式与默认端口

History Server 是独立进程(目前只能 standalone 方式运行),用脚本管理:

# Start or stop the HistoryServer bin/historyserver.sh (start|start-foreground|stop)

默认绑定 localhost,端口 8082。

4. 核心配置:两端都要配

4.1 JobManager 侧:把归档写到哪里

在 Flink 配置文件里指定归档目录:

# Directory to upload completed job informationjobmanager.archive.fs.dir: hdfs:///completed-jobs 

这一步只发生在 JobManager:作业结束后把归档信息上传到该目录。

4.2 History Server 侧:监控哪些目录、多久刷新一次、缓存放哪

# Monitor the following directories for completed jobshistoryserver.archive.fs.dir: hdfs:///completed-jobs # Refresh every 10 secondshistoryserver.archive.fs.refresh-interval:10000# Local cache directory for downloaded archiveshistoryserver.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 idhistoryserver.log.jobmanager.url-pattern: http://my.log-browsing.url/<jobid># HistoryServer will replace <jobid> and <tmid> with the relevant job id and taskmanager idhistoryserver.log.taskmanager.url-pattern: http://my.log-browsing.url/<jobid>/<tmid>

建议把这里对接到你们的日志检索入口(例如按 jobId/tmId 作为查询条件或路径变量),形成“指标页 → 日志页”的闭环排障体验。

6. REST API:用 JSON 把历史作业数据接入平台

所有请求形如:

http://hostname:8082/<path>

常用接口清单(节选)

  • /config
  • /jobs/overview
  • /jobs/<jobid>
  • /jobs/<jobid>/exceptions
  • /jobs/<jobid>/config
  • /jobs/<jobid>/vertices
  • /jobs/<jobid>/vertices/<vertexid>
  • /jobs/<jobid>/vertices/<vertexid>/subtasktimes
  • /jobs/<jobid>/plan
  • /jobs/<jobid>/jobmanager/log-url
  • /jobs/<jobid>/taskmanagers/<taskmanagerid>/log-url

几个常见 curl 例子:

# 查看历史作业总览curl http://historyserver:8082/jobs/overview # 查看某个作业异常curl http://historyserver:8082/jobs/<jobid>/exceptions # 查看某个作业的执行计划(DAG/plan)curl http://historyserver:8082/jobs/<jobid>/plan # 查看某个算子的 subtask 执行耗时curl http://historyserver:8082/jobs/<jobid>/vertices/<vertexid>/subtasktimes 

7. 生产最佳实践与常见坑

1)归档目录要“稳定、共享、权限正确”

  • 多 JM/TM 节点都要能访问(尤其是 HDFS/对象存储)
  • 权限问题是最常见的“归档写不进去/HistoryServer 读不到”

2)对象存储要记得装 filesystem 插件

  • jobmanager.archive.fs.dir/historyserver.archive.fs.dir 如果用 s3://oss://gs://wasb:// 等路径,必须确保对应插件 jar 在 plugins 中并正确配置凭证

3)本地缓存目录要规划容量

  • History Server 会把归档下载到本地缓存,如果长期运行且归档非常多,需要磁盘容量与清理策略
  • 如果你们归档目录按天分区,也可以通过目录规划降低单目录压力

4)轮询间隔要按规模调

  • 作业量大时过于频繁会对存储造成额外压力
  • 作业量小但需要快速可见性(例如发布验证),可以缩短 interval

5)日志跳转模板要与日志平台“真的能定位到”

  • 最好在日志平台侧做 jobId/tmId 维度的索引或查询预置,否则跳过去仍然找不到日志

Read more

Flutter 三方库 shelf_web_socket 的鸿蒙化适配指南 - 实现具备高性能全双工长连接与协议协商能力的端侧服务端架构、支持分布式实时信令与多端协同实战

Flutter 三方库 shelf_web_socket 的鸿蒙化适配指南 - 实现具备高性能全双工长连接与协议协商能力的端侧服务端架构、支持分布式实时信令与多端协同实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 shelf_web_socket 的鸿蒙化适配指南 - 实现具备高性能全双工长连接与协议协商能力的端侧服务端架构、支持分布式实时信令与多端协同实战 前言 在进行 Flutter for OpenHarmony 开发时,当我们的鸿蒙应用需要充当“控制中心”角色(如控制智能家居、开启本地调试服务或实现 P2P 实时对抗脚本时),如何在端侧直接拉起一个支持 WebSocket 协议的高性能微服务端?shelf_web_socket 是针对 shelf 后端框架封装的一款官方级 WebSocket 处理器。本文将探讨如何在鸿蒙端构建极致、透明的长连接交互引擎。 一、原直观解析 / 概念介绍 1.1 基础原理 该库本质上是一个 shelf 处理函数(Handler)

要成为AI的主人,而不是被它所绑架

要成为AI的主人,而不是被它所绑架

这两年,AI 编码工具确实给开发效率带来了很大提升。写脚本更快了,补测试更轻松了,搭原型更顺手了,连很多文档工作都被大幅压缩。笔者自己在持续使用 GPT-5.4 和 Claude 一段时间后,也真切感受到了这种效率红利。与此同时,随着使用越来越深入,笔者也开始经常在架构师论坛和技术社区里,围绕 AI 开发的安全性、保密性、稳定性、可控性等问题,与多位大厂架构师持续交流。讨论得越多、实践得越久,我越认同一个判断:小项目、低敏项目、单人维护项目,AI 基本没有大问题;但一旦进入多人协作、长期演进、涉及核心资产和生产责任的项目,AI 如果没有边界、规范和审计,就很容易从“效率工具”变成“失控放大器”。 很多人讨论 AI,还停留在“能不能更快把功能做出来”这个层面。但架构师的关注点从来不只是“能不能开发出来”,而是“

AI大模型核心概念解析:Token 究竟是什么?

在大模型(LLM)的世界里,token 是一个基础且重要的概念。接下来,让我们一文读懂大模型中的 token 究竟是什么。 一、token究竟是什么? 在大语言模型(LLM)中,Token 代表模型可以理解和生成的最小意义单位,是模型处理文本的基础单元。它就像是模型世界里的 “积木块”,模型通过对这些 “积木块” 的操作来理解和生成文本。根据所使用的特定标记化方案,Token 可以表示单词、单词的一部分,甚至只表示字符。 例如,对于英文文本,“apple” 可能是一个 Token,而对于中文文本,“苹果” 可能是一个 Token。但有时候,Token 并不完全等同于我们日常理解的单词或汉字,它还可能是单词的片段,比如 “playing” 可能被拆分为 “play” 和 “ing” 两个 Token。 为了让模型能够处理这些 Token,

[AI实战]Ubuntu 下安装OpenClaw——从零搭建你的专属AI助理

[AI实战]Ubuntu 下安装OpenClaw——从零搭建你的专属AI助理

[AI实战]Ubuntu 下安装OpenClaw——从零搭建你的专属AI助理 前言 OpenClaw是一款功能强大的AI助理框架,支持自定义技能、多模型接入,并能通过聊天软件与你交互。本文将手把手带你在Ubuntu系统上完成OpenClaw的安装与配置,并实现外部安全访问。无论你是AI爱好者还是开发者,都能通过本文快速拥有一个属于自己的AI助理。 环境准备: * 操作系统:Ubuntu 20.04 / 22.04 / 24.04(本文以24.04为例) * 权限:需要使用root或拥有sudo权限的用户 * 网络:能够访问GitHub及npm源(建议使用国内镜像加速) 一、升级Node.js至v22+ OpenClaw要求Node.js版本≥22.0.0,低版本会导致npm安装失败。若系统已安装其他版本,请务必升级。 方法一:使用nvm(推荐,便于多版本管理) 1. 安装nvm curl -o- https://raw.