我正在使用 FLink v.1.4.0
.我正在使用一个QueryableStateStream
,我以某种方式键入它,然后sink
它来创建Queryable State
,例如:
stream.keyBy(0).asQueryableState("query-name");
只要我的Flink
工作还在运行,这一切都很好。一旦工作被终止,状态就无法再访问。
我有两个问题:
- 如何保持可查询状态?这可以像检查点一样定期完成吗?是否应改用托管状态解决方案?
- 如何使用从先前执行中保留的数据初始化
QueryableState
?
我希望这两个问题都有实际的例子。谢谢。
可查询状态是托管状态,它将被检查点并还原。当然,确实,当你的应用程序不运行时,Flink 状态是无法访问的。
你可以附加一些类似 redis 或 cassandra 的东西,或者任何你喜欢的数据库作为你的工作(或压缩的 Kafka 主题(的接收器。这将使数据在 Flink 作业未运行时可用。但值得考虑的是,保持数据库(或 Kafka(运行是否比保持 flink 作业更容易。
无需从外部数据库重新初始化状态,因为 Flink 将从检查点或保存点恢复其状态。但是如果需要的话,你可以在 RichFunction 的 open(( 方法中做到这一点。