我在用Flink v.1.4.0
. 我用的是 QueryableStateStream
我以某种方式键入 sink
创建一个 Queryable State
,例如:
stream.keyBy(0).asQueryableState("query-name");
只要我的孩子 Flink
作业正在运行。一旦这项工作被终止,州政府就再也无法进入了。
我有两个问题:
如何保持可查询状态?这可以像检查点一样定期完成吗?我应该改用托管状态解决方案吗?
如何初始化 QueryableState
从上一次执行中保留数据?
我希望这两个问题都有实际的例子。谢谢。
1条答案
按热度按时间xt0899hw1#
可查询状态是托管状态,它将被检查点和还原。当然,当应用程序没有运行时,flink状态确实是不可访问的。
你可以把redis或者cassandra或者任何你喜欢的数据库作为你工作的一个接收器(或者一个压缩的kafka主题)。这将使数据在flink作业未运行时可用。但值得考虑的是,保持数据库(或Kafka)运行是否比保持flink工作更容易。
无需从外部数据库重新初始化状态,因为flink将从检查点或保存点还原其状态。但如果需要的话,可以在richfunction的open()方法中实现。