如何在Flink中保留可查询状态?

时间:2018-01-24 11:35:17

标签: persistence apache-flink flink-streaming checkpointing

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

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

只要我的Flink工作正在运行,这一切都很好。一旦工作被杀,州就不再可以进入。

我有两个问题:

  1. 如何保持可查询状态?这可以定期进行,如检查点?我应该使用Managed State解决方案吗?
  2. 如何使用先前执行中保留的数据初始化QueryableState
  3. 我很欣赏这两个问题的实际例子。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

无需从外部数据库重新初始化状态,因为Flink将从检查点或保存点恢复其状态。但是如果需要的话,你可以在RichFunction的open()方法中做到这一点。