对于一个长期运行的流式应用来说,并不能像批处理任务一样,发现一个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请求
通知应用生成保存点
这个保存点的生成同上,如果保存点创建失败,那么应用不会终止.
获取保存点信息,可以使用
删除保存点信息为
对应用进行扩所容的请求为