State Processor API 介绍
能够从外部访问 Flink 作业的状态一直用户迫切需要的功能之一,在 Apache Flink 1.9.0 中新引入了 State Processor API,该 API 让用户可以通过 Flink DataSet 作业来灵活读取、写入和修改 Flink 的 Savepoint 和 Checkpoint。
在 Flink 1.9 之前是如何处理状态的?
一般来说,大多数的 Flink 作业都是有状态的,并且随着作业运行的时间越来越久,就会累积越多越多的状态,如果因为故障导致作业崩溃可能会导致作业的状态都丢失,那么对于比较重要的状态来说,损失就会很大。为了保证作业状态的一致性和持久性,Flink 从一开始使用的就是 Checkpoint 和 Savepoint 来保存状态,并且可以从 Savepoint 中恢复状态。在 Flink 的每个新 Release 版本中,Flink 社区添加了越来越多与状态相关的功能以提高 Checkpoint 的速度和恢复速度。
有的时候,用户可能会有这些需求场景,比如从第三方外部系统访问作业的状态、将作业的状态信息迁移到另一个应用程序等,目前现有支持查询作业状态的功能 Queryable State,但是在 Flink 中目前该功能只支持根据 Key 查找,并且不能保证返回值的一致性。另外该功能不支持添加和修改作业的状态,所以适用的场景还是比较有限。
使用 State Processor API 读写作业状态
在 1.9 版本中的 State Processor API,它完全和之前不一致,该功能使用 InputFormat 和 OutputFormat 扩展了 DataSet API 以读取和写入 Checkpoint 和 Savepoint 数据。由于 DataSet 和 Table API 的互通性