对于一个长期运行的流式应用来说,并不能像批处理任务一样,发现一个Bug,再去修复这个Bug,批处理修复Bug只需要再部署一次即可.

而如果是一个需要长期运行的流式作业该怎么办呢?如何在保证正确的同时以低成本应用的方式来部署新的应用?

对于这样一个长期运行的应用,Flink本身提供了一些相关组件方便运维

比如一个命令行式的客户端工具

一套命令行客户端和WebUI的底层REST API

一个网页客户端,方便查看应用及集群信息

那么我们将分开介绍这些组件

不过在说明这些组件之前,我们还是要回顾下Flink再启动应用必不可少的功能,保存点的使用

对于保存点,其的创建方式和检查点一致,但是他们的生命周期有所差异.

对于检查点来说,基本上应用取消的时候就会被自动删除了.而保存点则恰好相反,需要在外部交由用户手动触发

检查点会被保存在远程的数据存储上,包含了任务状态和数据文件,对应的保存的是绝对路径.

那么简单说完了保存点机制

我们可以将讲述相关的组件:首先是用过命令行客户端来管理应用

Flink命令行客户端提供了启动,停止等管理应用的功能

命令行工具,可以通过命令 ./bin/flink来进行调用

其会从 ./conf.flink-conf.yaml文件中读取配置,

对应的启动命令为

./bin/flink run ~/myApp.jar

这样就会以默认方式将一个JAR文件提交到主进程

如果加上了 -d 将会以后台模式进行运行

或者加上 -p 来制定某个应用的默认并行度,不过默认并行度优先度比较低,会被硬编码中的并行度进行覆盖.

或者通过 -c 的参数,来指定jar包使用的main类

其次是通过客户端来列出正在运行的应用

./bin/flink list -r

这样会获取到名称,以及对应的JobID

图片

生成和清理保存点

使用如下的命令来生成一个保存点

./bin/flink savepoint <jobId> [savepointPath]

通过传入一个JobId来生成一个保存点,如果指定了保存点的路径,就会存到提供的目录,不然就走flink-conf.yaml中的默认保存点路径.

比如可以如下的方式来保存一个保存点

图片

通过删除对应的保存点,则是通过传入一个绝对路径来进行删除

命令如下,就是加了-d的参数

图片

不过在删除的时候,需要注意保存点也会触发

那么如何取消一个应用呢

可以使用 ./bin/flink cancel <jobId>

如果希望在取消一个应用的同时生成一个保存点,可以加上-s参数

./bin/flink cancel <jobId> -s [savepointPath]

但是需要注意,如果保存点生成失败,作业将继续运行,除非再次尝试取消

最后是从保存点启动这个应用

从保存点启动应用很简单,只需要在run的时候加上-s,提供保存点的绝对路径就可以.

./bin/flink run -s [savepointPath] <jobjar>

作业启动后,会将各个状态快照和应用中的所有状态进行匹配

根据唯一算子表示和应用算子内进行比较,只有可以兼容的时候才会从保存点进行启动,如果没有进行修改过.那么是可以正常重启的,如果进行了修改,则根据修改的东西,出现不同的结果.

1.     添加了某些新的状态或者某些新的唯一标示,会导致无法找到这些新状态,从而初始化为空

2.     如果删除了某个状态,则会出现无法匹配的情况,那么Flink默认不启动应用,以防止状态丢失,除非加上-n选项来禁止此安全检查

3.     如果对状态进行了修改,无论是状态原语还是状态类型,都会导致无法启动应用.

其他还有些特殊的命令,

比如进行应用的扩缩容,这样可以通过modify进行并行度的修改

./bin/flink modify <jobId> -p <newParallelism>

比如如下的设置应用并行度为16

图片

我们上面还说了,Flink提供了对应的REST API来管理应用.

Flink使用一个Web服务器来同时支持REST API和Web UI,这个Web服务器运行在Dispatcher中,使用的端口是 ./conf/filnk-conf.yaml的文件的rest.port配置项对该端口进行修改,如果设置为-1那么会禁用REST API和Web UI

那么我们使用curl来调用REST API

一个典型的curl REST命令如下

图片

V1是REST API的版本.其他就是我们WEB服务器所在的端口

那么第一个命令,我们先看下集群的基本信息

图片

该命令会返回集群的基本信息,比如Flink版本,TaskManager和处理槽数量,以及当前正在运行,已经完成,已经取消或者已经失败的作业.

图片

关于集群的管理,除了overview之外,还包含着

图片

图片

图片

这个可以获取到多个查询指标,并且将获取后的指标作为参数再次调用这个API获取详细信息.

图片

列出所有TaskManager的相关指标

关闭集群的REST调用

图片

只会关闭主进程

而关于Flink应用

REST API可以管理和监控Flink应用,如果要启动一个应用,可以先将JAR文件传给集群,使用如下的API

图片

然后可以列出所有已经上传的JAR文件信息

图片

删除JAR文件的REST请求

图片

启动对应的命令的REST请求

图片

不同参数来启动Flink应用.

之后是列出所有正在运行的REST请求

图片

展示应用详细信息的REST请求

图片

之后是取消应用的REST请求

图片

通知应用生成保存点

图片

这个保存点的生成同上,如果保存点创建失败,那么应用不会终止.

获取保存点信息,可以使用

图片

删除保存点信息为

图片

对应用进行扩所容的请求为

图片

发表评论

邮箱地址不会被公开。 必填项已用*标注