首页 > 解决方案 > 使用 RestClusterClient 在 Flink 集群上运行已部署的作业

问题描述

我正在尝试使用 Rest 请求在 Flink Cluster 上运行已部署的作业。

我成功使用了一个简单的休息客户端

POST http://localhost:8081/v1/jars/13775a71-0723-4c62-979b-7e9a9de3a0dc_some.jar/run { "programArgsList" : ["test1", "test2"] }

但我想用 Java 做,因为已经有一个 RestClusterClient 我很想使用它,但它的文档很差

https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/client/program/rest/RestClusterClient.html

从我从代码中看到的情况来看,这个 RestClusterClient 似乎没有这种可能性

看起来它密切关注 CLI 中实现的功能,并在此处记录https://ci.apache.org/projects/flink/flink-docs-stable/ops/cli.html,因此任何run命令都需要在作业中传递一个 jar。

无法使用此客户端运行已部署的作业。我对吗?

标签: javarestapache-flink

解决方案


Flink 的集群 REST API 旨在与任何 REST 客户端一起使用。RestClusterClient模块附带的内容flink-clients是供内部使用的。但是,您也可以通过正确设置的 Flink 实例化它来直接使用它Configuration

Configuration用于检索集群 REST 端点。因此,如果您配置了错误的 REST 地址或错误的 HA 模式,则RestClusterClient可能无法与集群通信。如果您知道flink-conf.yaml启动集群的位置,那么我建议您使用GlobalConfiguration#loadConfiguration(configurationDirectory)它来加载它。这应该给你一个很好的起点。

启动后,RestClusterClient您可以通过以下方式与集群交互

  • submitJob:提交新作业(仅当您部署了会话集群时才支持)
  • requestJobResult:作业执行的结果;如果这是一个流式作业,那么这可能永远不会完成
  • cancel:取消给定的工作
  • triggerSavepoint:触发​​保存点并返回其路径
  • listJobs:列出集群上所有当前正在运行的作业
  • 还有一些电话

推荐阅读