flink历史服务

flink任务停止后,JobManager会将已经完成任务的统计信息进行存档,历史服务进程则在任务停止后可以对任务统计信息进行查询。比如:最后一次的checkpoint、任务运行时的相关配置。

配置相关
  • jobmanager.archive.fs.dir:JobManager任务存档目录。任务结束后,会将统计信息写到该目录下,例如:hdfs://ns1/flink/completed-jobs。配置后,flink会自动创建completed-jobs目录。
  • historyserver.archive.fs.dir:history查询的completed-job的目录。必须与jobmanager.archive.fs.dir绑定的路径一致。
  • historyserver.archive.fs.refresh-interval:history获取数据的间隔。
  • historyserver.web.tmpdir:历史进程存储已结束job信息的本地存储路径。默认路径为
    System.getProperty("java.io.tmpdir") + File.separator + "flink-web-history-" + UUID.randomUUID(),linux系统临时目录为/tmp。

默认启动端口8082:

bin/historyserver.sh (start|start-foreground|stop)
历史服务存储内容

查看/tmp/flink-web-history-7586c510-103f-4443-8252-59c56d86930e历史服务存储文件夹中的内容。


历史服务根目录

历史服务存储文件中,存储了用于页面展示的模板配置。历史任务信息存储在Jobs路径下,其中包含了已经完成的Job,每次启动都会从historyserver.archive.fs.dir拉取所有的任务元数据信息。


jobs包含的任务

每个任务文件夹中包含我们需要获取的一些信息,通过restAPI获取时指标时,就是返回这些内容。


job存储的元数据信息
使用场景

任务运行时,通过RestAPI将产生的checpoint路径存储到DB,以便根据路径续跑任务。当任务结束时,可能没办法及时从正在运行的任务中拉去最后一次checkpoint信息,此时需要从历史服务获取,http://historyIP:8082/jobs/jobid/checkpoints

线上问题

线上任务停止后,根据存储在DB的checkpoint路径选择续跑,此时续跑失败。异常日志显示选择续跑的checkpoint文件不存在,查看DB和hdfs上存储的checkpoint信息,发现hdfs保存的最后一条checkpointID和DB存储的最后一条不一致。初步定位,最后一次获取checkpoint信息失败。

查看历史服务报错日志,是因为历史服务未能找到hdfs://ns1/flink/completed路径,导致获取数据失败。查看hdfs确实也没有该路径,最后定位没有配置jobmanager.archive.fs.dir参数。

推荐阅读更多精彩内容