0

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

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

只要我的Flink工作还在运行,这一切都很好。一旦作业被终止,该状态就不再可访问。

我有两个问题:

  1. 如何保持可查询状态?这可以像检查点一样定期完成吗?我应该改用托管状态解决方案吗?
  2. 如何QueryableState使用从先前执行中持久保存的数据来初始化 a?

我会很感激这两个问题的实际例子。谢谢。

4

1 回答 1

2

可查询状态是托管状态,它将被检查点和恢复。当然,当您的应用程序未运行时,确实无法访问 Flink 状态。

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

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

于 2018-01-24T20:17:16.010 回答