我们来看一下flink官网的图:
光看图就头晕了,我们可以来整理一下。
首先flink job任务状态总共有:
- Created
- Running
- Finished
- Failed
- Canceled
- Failing
- Canceling
- Restarting
- Suspended
根据个人理解,我们可以把这些状态分为四大类:
- 起始态
- 中间态
- 最终态
- 过渡态
起始态表示任务启动时的状态,中间态表示任务运行时的状态,最终态表示任务最后的状态,过渡态表示任务在上述这些状态转化时中间过渡的状态。
这样我们就把九个状态归类到四个状态里面去了:
状态分类 | 状态 |
---|---|
起始态 | Created |
中间态 | Running |
最终态 | Finished、Failed、Canceled |
过渡态 | Failing、Canceling、Restarting、Suspended |
再为了方便理解,我们先省略掉过渡态考虑任务运行变化情况。一个job如果正常运行,那么它的状态变化就是:
Created -> Running -> Finished
如果失败,则是:
Created -> Failed
或
Created -> Running -> Failed
如果被取消了,则是:
Created -> Canceled
或
Created -> Running -> Canceled
总共状态变化就这么四种。
这时,我们再来考虑过渡态。因为Running -> Finished
是没有中间态的,所以不用考虑过渡态。而对于Failed
和Canceled
来说,都有各自的过渡态Failing
和Canceling
。只需要在上述的变化链路中加上过渡态即可。
所以我们可以把状态变化修改成:
失败
Created -> Failing -> Failed
或
Created -> Running -> Failing -> Failed
取消
Created -> Canceling -> Canceled
或
Created -> Running -> Canceling -> Canceled
并且对于失败任务来说,还有可能进行重启,所以失败的状态变化还可以是:
Created -> Failing -> Restarting -> Created
或
Created -> Running -> Failing -> Restarting -> Created
最后,我们来看Suspended
。这个状态很简单,只要不是最终态,都可以转换为Suspended
。
这样我们基本把一个任务的状态变化就给理清了,总共完整的状态链路变化就五条:
成功
Created -> Running -> Finished
失败
Created -> Failing -> Failed
Created -> Running -> Failing -> Failed
取消
Created -> Canceling -> Canceled
Created -> Running -> Canceling -> Canceled
另加两条失败重启的循环链路:
失败重启
Created -> Failing -> Restarting -> Created
Created -> Running -> Failing -> Restarting -> Created