前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flink中可查询状态是如何工作的

Flink中可查询状态是如何工作的

作者头像
smartsi
发布2021-06-29 14:47:44
2.3K0
发布2021-06-29 14:47:44
举报
文章被收录于专栏:SmartSiSmartSi

原文发布时间:2017年

QueryableStates 允许用户对流的内部状态进行实时查询,而无需将结果存储到任何外部存储中。 这制造了许多有趣的可能,因为我们不再需要等待系统写入外部存储(这一直是此类系统的主要瓶颈之一)。 甚至可能没有任何类型的数据库能让用户的应用程序直接查询流,这将使应用程序更快、更便宜。 这可能不适用于所有用例,但如果您的 Pipeline 必须维护内部状态(可能是进行一些聚合),则最好使状态可用于查询。

我们首先看看当我们使状态可查询以及何时查询时,在 Flink 内部的整体步骤。

1. 使状态可查询

假设我们已经创建了一个具有可查询状态的 Pipeline 并通过 JobClient 提交了作业。下图显示了 Flink 内部发生的事情:

我希望这个图是不言自明的,但总而言之,一旦提交了 Job,JobManager 就会从 JobGraph 构建 ExecutionGraph,然后将任务部署到 TaskManager。在创建任务实例时,会创建 Operator,如果发现 Operator 是可查询的,则对 Operator 的 ‘状态’ 的引用将保存在 KvStateRegistry 中,并带有一个状态名称。状态名称是在创建作业期间设置的唯一名称。然后 JobManager actor 会收到有关状态注册的通知,JobManager 将位置信息存储在 KvStateLocationRegistry 中,后面就可以在查询期间使用。

2. 查询状态

上图显示了客户端(不属于作业提交的一部分)执行查询期间的步骤。客户端向 JobManager actor 发送 KvStateLookup 消息,该请求应包含构建作业时使用的 JobId 以及状态名称。JobManager 会检查 JobId 的有效性,获取 JobId 的 JobGraph,并从 JobGraph 中检索 KvStateLocationRegistry。JobManager 然后将查询状态对应的状态位置信息返回给 KvStateClient。此响应包含状态存储的 KvStateServer 地址。然后客户端打开与 KvStateServer 的连接并使用 KvStateID 从注册表中获取状态。检索到状态后,将提交异步查询以从给定键的状态中获取值。得到的结果被序列化并发回客户端。同时,状态在处理过程中作业会不断更新,因此客户端在查询时总是可以看到最新的状态值。

在博客的下一部分中,我们将实现一个 Streaming Job,它通过 QueryableState API 公开其状态,并创建一个 QueryClient 来查询此状态。谢谢阅读!

欢迎关注我的公众号和博客:

原文:Queryable States in ApacheFlink - How it works

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-242,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 使状态可查询
  • 2. 查询状态
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档