当创建一个Flink任务后,该任务可能会经历多种状态。目前Flink给任务共定义了9种状态,包括:Created
,Running
,Finished
,Cancelling
,Canceled
,Restarting
,Failing
,Failed
,Suspended
。下面这张图详细展示了一个Job可能会经历的所有状态。
- 最简单的一种状态就是:作业启动时处于
Created
状态,任务启动后处于Running
状态,当所有运行的task都进入了最终状态,任务会自动切换到Finished
状态,这是一个正常job从启动到停止的正常流程,但再实际生产环境,可能也会出现其他一些情况。 - 如果任务在启动后,因为网络原因或者其他原因导致job失败,那么任务首先会切换到
Failing
状态,这样做的目的主要是为了取消所有正在运行的tasks。当然,如果配置了失败重试次数,任务会自动尝试重启,如果重启成功,那么任务会从Restarting
状态变更为Created
继而再处于Running
状态,如果重启失败且已无法恢复,那么任务会等所有tasks都进入到最终状态后变更为Failed
状态。 - 如果用户想取消一个刚创建的任务,那么任务会从
Created
状态变更为Cancelling
状态,也可能从Running
状态变更为Cancelling
状态,处于Cancelling
状态的任务,会取消掉所有正在运行的tasks,等所欲tasks都结束后,任务会进入Canceled
状态。
Flink任务除了这几种任务状态外,还有Suspended
这种特殊的状态。当任务状态为Finished
,Canceled
,Failed
这3种状态时,任务会彻底结束,从资源管理器中终结,同时会自动清理掉任务的一些缓存数据。但Suspended
是一个局部的终结状态,简单来讲就是任务只是被当前的jobManager终结了,但集群中的其他jobManager可以通过高可用的方式,获取到任务的信息并重启任务。因此一个处于Suspended
状态的作业不会被彻底清理掉。
根据任务的不同状态,我们可以通过一些监控策略对任务的状态提前监控和预警,降低生产任务Down风险。