1.运行并管理流式应用
flink自身提供的很多功能可以简化流式应用的维护,这些功能大都基于保存点机制,为了对主进程,工作进程以及应用进行监控,flink对外公开了以下接口
- 一个用于提交和控制应用的命令行客户端工具
- 一套用于命令行客户端和web ui的底层REST API
- 一个用于提供有关flink集群和当前运行应用详细信息及指标的web ui,它同时提供了基本的应用提交和管理功能
保存点
保存点和检查点的本质相同,二者都是应用状态的一致性完整快照。但他们的声明周期有所差异。检查点会自动创建,在发生故障时自动加载并由Flink自动删除(取决于应用具体配置)。此外,除非应用显式指定要保留检查点,否则它们会在应用取消时自动删除。而保存点则与之相反,它们需要由用户或外部服务手动触发,且永远不会被Flink自动删除。
每个保存点都对应一个持久化数据存储上的目录。它由一个包含了所有任务状态数据文件的子目录和一个包含了全部数据文件绝对路径的二进制元数据文件组成。
通过命令行客户端管理应用
Flink命令行客户端提供了启动、停止和管理Flink应用的功能。它会从./conf/flink-conf.ymal
文件中读取配置。
通过REST API管理应用
REST API可供用户或脚本直接访问,它可以对外公开有关Flink集群和应用的信息,包括指标数据及用于提交和控制应用程序的服务端点等。Flink使用一个Web服务器来同事支持REST API和Web UI,该服务会作为Dispatcher进程的一部分来运行。
在容器中打包并部署应用
2.控制任务调度
为了实现并行执行,Flink应用会将算子划分为不同的任务,并将这些任务分配到集群中的不同工作进程上。任务分配的目标工作进程,任务的共存情况以及工作进程中的任务数都会对应用性能产生显著影响。
控制任务链接
任务链接指的是将两个或多个算子的并行任务融合在一起,从而可以从它们在同一线程中执行。融合的任务只需通过方法调用就可以进行记录交换,因此几乎没有通信成本。由于任务链接可以提高大多数应用的性能,所以Flink默认会启用它。
然而,也有特定的应用可能无法从中受益。其中一种情况是我们希望将一连串负载较重的函数拆开,让它们在不通的处理槽内执行。Flink支持禁用应用内的任务链接,也可以控制单个算子的链接行为。
定义处理槽共享组
Flink默认任务调度策略会将一个完整的程序分片分配到一个处理槽中。根据应用的复杂度以及算子的计算成本,Flink提供了处理槽共享组机制,允许用户手动将任务分配到处理槽中。
默认情况下,所有算子都属于"default"处理槽共享组,对于每个算子,你都可以利用slotSharingGroup(String)
方法为其指定处理槽贡献组
3.调整检查点及恢复
在启用容错功能的情况下,Flink会周期性的将应用状态存储到检查点中。由于在生成检查点时可能需要将大量数据写入持久化存储中,所以其代价可能非常昂贵。增大检查点的生成间隔可以降低常规处理过程中的容错开销,但它同时会使作业在故障恢复过程中需要重新处理更多的数据。
配置检查点
Flink提供了一系列用于调整检查点和状态后端的参数。包括但不限于:指定生成间隔、启用检查点压缩、应用停止后保留检查点等。
配置状态后端
应用状态后端负责维护本地状态,生成检查点和保存点以及在故障时恢复应用状态。因此,应用状态后端的选择和配置对检查点相关操作的性能有很大影响。
Flink默认状态后端是MemorStateBackend。由于它将所有状态保存在内存中,而且检查点全部位于易失且受JVM大小约束的JobManager堆存储内,所以不建议将其用于生产环境。
Flink还支持配置FsStateBackend和RocksDBStateBackend状态后端。
配置故障恢复
当一个拥有检查点的应用发生故障时,它会经过一系列步骤重启,具体包括启动任务、恢复状态(包括数据源任务的读取偏移)和继续处理。为了能够赶得上数据流的进度,应用处理积累数据的速率必须要高于新数据到来的速率。它在追赶进度期间的处理延迟会有所增加。因此,从重启到成功恢复常规处理的进度追赶期间,应用需要足够多的备用资源。
恢复过程除了资源因素,还有两个两个值得关注的主题:重启策略和本地恢复。
重启策略
Flink提供了三种重启策略:
- fixed-delay:已配置的固定时间间隔重试将应用重启某个固定的次数
- failture-rate:允许在未超过故障率的前提下不断重启应用。故障率的定义为某个时间间隔内的最大故障次数
- no-restart:不重启应用,直接失败
本地恢复
Flink支持一种称为本地恢复的特性,能够在应用从相同机器重启时显著提高恢复速度。在启用该功能后状态后端除了将数据写入远程存储系统外,还会将检查点数据在工作进程所在的节点的本地磁盘复制一份。当应用需要重启时,Flink会尝试将相同的任务调度到和之前相同的工作节点执行。如果成功,则任务会优先尝试从本地磁盘加载检查点数据。如果出现任何问题,则将退回到使用远程存储进行处理。
4.监控flink集群和应用
FLINK WEB UI
Flink提供的了解集群和内部作业情况概要最为简单的方式。可以通过http://<jobmanager-hostname>:8081
地址来访问它。
指标系统
Flink在默认情况下会收集很多系统和应用指标。指标的手机是按照每个算子、每个TaskManager或JobManager来进行的。
延迟监控
5.配置日志行为
日志是调试和理解应用行为的另一个重要工具。默认情况下,Flink使用SLF4J日志抽象和log4j日志框架。要修改log4j记录器的属性,可以通过修改conf/目录中的log4j.properties文件来实现。