如何在 Flink 中持久化可查询状态?

How to persist a Queryable State in Flink?

我正在使用 FLink v.1.4.0。我正在使用一个 QueryableStateStream,我以某种方式键入它,然后 sink 它创建一个 Queryable State,例如:

stream.keyBy(0).asQueryableState("query-name");

只要我的 Flink 工作是 运行 就好了。一旦作业被终止,状态就不再可访问。

我有两个问题:

  1. 如何保持可查询状态?这可以像检查点一样定期完成吗?我应该改用 Managed State 解决方案吗?
  2. 如何使用上次执行中保留的数据初始化 QueryableState

对于这两个问题,我将不胜感激。谢谢。

可查询状态是托管状态,它将被检查点和恢复。当然,当您的应用程序不是 运行.

时,Flink 状态是不可访问的。

您可以将诸如 redis 或 cassandra 之类的东西或您喜欢的任何数据库附加到您的工作(或压缩的 Kafka 主题)中作为接收器。这将使数据可用,而您的 Flink 作业不是 运行。但是值得考虑的是,维护数据库(或 Kafka)运行 是否比维护 flink 作业更容易。

无需从外部数据库重新初始化状态,因为 Flink 将从检查点或保存点恢复其状态。但如果需要,您可以在 RichFunction 的 open() 方法中执行此操作。