我正在尝试将作业从 Jenkins 部署到 Flink。到目前为止,我已经弄清楚如何提交在构建作业中创建的 jar 文件。现在我想找到任何使用旧 jar 运行的 Flink 作业,优雅地停止它们,然后利用我的新 jar 开始新作业。
API 具有列出作业、取消作业和提交作业的方法。但是,似乎没有停止作业端点。关于如何使用 API 优雅地停止作业有什么想法吗?
即使停止端点没有记录,它确实存在并且行为与取消端点类似。
基本上,这是 Flink REST API 文档中缺少的一点:
停止工作
请求DELETE
。/jobs/:jobid/stop
停止工作,成功的结果是
。{}
对于那些不知道取消和停止之间区别的人(复制自此处):
取消和停止(流)作业之间的区别如下:
在取消调用时,作业中的操作员会立即收到
方法调用来取消它们: 尽快。 如果操作员在取消调用后没有停止,Flink 将开始定期中断线程 直到停止。cancel()
“停止”调用是停止正在运行的流作业的更优雅的方式。停止仅适用于作业 它使用实现
接口的源。当用户请求停止作业时, 所有源都会收到StoppableFunction
方法调用。该作业将继续运行,直到所有源正确关闭。 这允许作业完成所有飞行数据的处理。stop()
由于我使用的是 Flink 1.7,以下是如何取消/停止该版本的 flink 作业。
已经亲自测试过
请求路径:
/jobs/{jobid}
jobid - 标识作业的 32 个字符的十六进制字符串值。
请求方式:PATCH
查询参数:
mode(可选):指定终止模式的字符串值。支持的值为:“取消、停止”。
示例
10.xx.xx.xx:50865/jobs/4c88f503005f79fde0f2d92b4ad3ade4?mode=cancel
启动yarn-seesion时主机端口可用
提交职位后即可获得职位编号
参考:
https://ci.apache.org/projects/flink/flink-docs-release-1.7/monitoring/rest_api.html`
对于 Flink 1.19,如果以
./bin/start-cluster.sh
启动,Flink 似乎需要向 /jobs/<job id>/yarn-cancel
发出普通的 GET 请求才能取消作业。
似乎没有记录。我通过查看取消工作时 webui 的操作找到了 API。