注:flink1.9的新功能与改进均是参考官方文档,以此来补充自己的知识面,顺便以博客的形式为今后复习
细粒度批作业恢复 (FLIP-1)
批作业(DataSet、Table API 和 SQL)从 task 失败中恢复的时间被显著缩短了。在 Flink 1.9 之
前,批处理作业中的 task 失败是通过取消所有 task 并重新启动整个作业来恢复的,即作业从头开始,所有进度都会废弃。在 1.9 版本中,Flink 将中间结果保留在网络 shuffle 的边缘,并使用这些数据恢复仅受故障影响的 tasks,即处在同一个 failover region (故障区)的 tasks。故障区是指通过 pipelined 数据交换方式连接的 tasks 集合。因此,作业中 batch-shuffle 的连接定义了故障区的边界。有关更多详细信息,请参见 FLIP-1。
要使用这个新的故障策略,需要确保 flink-conf.yaml 中有 jobmanager.execution.failover-strategy:region 的配置。
注意:Flink 1.9 发布包中默认就已经包含了该配置项,不过当从之前版本升级上来时,如果要复用之前的配置的话,需要手动加上该配置。
除此之外,还需要在 ExecutionConfig 中,将 ExecutionMode 设置成 BATCH,这样批作业才能有多个故障区。
“Region” 的故障策略也能同时提升 “embarrassingly parallel” 类型的流作业恢复速度,也就是不包含任何像 keyBy、rebalance 等 shuffle 的作业。当这种作业在恢复时,只有受影响的故障区 task 需要重启。对于其他类型的流作业,故障恢复行为与之前的版本一样。
State Processor API (FLIP-43)
直到 Flink 1.9,从外部访问作业的状态仅局限于:Queryable State(可查询状态)实验性功能。此版本中引入了一种新的强大类库,基于 DataSet 支持读取、写入、和修改状态快照。在实践上,这意味着:
•Flink作业的状态可以自主构建,通过读取外部系统的数据(例如外部数据库),转换成 savepoint。
•Savepoint 中的状态可以使用任意的 Flink 批处理 API 查询(DataSet、Table、SQL)。例如,分析关的状态模式或检查状态差异以支持应用程序审核或故障排查。
•Savepoint 中的状态 schema 可以离线迁移了,而之前的方案只能在访问状态时进行,是一种在线迁移。
•Savepoint 中的无效数据可以被识别出来并纠正。
新的 State Processor API 覆盖了所有类型的快照:savepoint,full checkpoint 和 incremental checkpoint。有关更多详细信息,请参见 FLIP-43。
Stop-with-Savepoint (FLIP-34)
"Cancel-with-savepoint" 是停止、重启、fork、或升级 Flink 作业的一个常用操作。然而,当前的实现并没有保证输出到 exactly-once sink 的外部存储的数据持久化。为了改进停止作业时的端到端语义,Flink 1.9 引入了一种新的 SUSPEND 模式,可以带 savepoint 停止作业,保证了输出数据的一致性。可以使用 Flink CLI 来 suspend 一个作业:
bin/flink stop -p [:targetSavepointDirectory] :jobId