专栏首页SmartSiFlink中可查询状态是如何工作的

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

原文发布时间: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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flink 1.9重大更新概览

    Flink 1.9改进批次作业恢复功能,工作进度将不再全部重来,可针对单一故障转移区域进行批次恢复工作,不会影响其他区域的工作进度。

    阿泽
  • Apache Flink实战(一) - 简介

    Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。 Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计...

    JavaEdge
  • Oracle如何查询当前的crs/has自启动状态

    我们知道在某些停机测试场景,是需要人为禁用crs/has的自启动的,防止过程中主机反复重启对数据库集群造成影响。 使用crsctl disable/enabl...

    Alfred Zhao
  • State Processor API:如何读取,写入和修改 Flink 应用程序的状态

    过去无论是在生产中使用,还是调研 Apache Flink,总会遇到一个问题:如何访问和更新 Flink 保存点(savepoint)中保存的 state?Ap...

    王知无-import_bigdata
  • Flink1.5发布中的新功能

    Flink 1.5.0 是 1.x.y 系列的第六个主要版本。与往常一样,它兼容之前 1.x.y 版本中使用 @Public 注解标注过的 API。

    smartsi
  • 如何检查macOS中硬盘的状态

    无论我们的Mac使用的是 SSD固态硬盘或HDD机械硬盘,都必须保持硬盘读写健康程度。毕竟,数据的丢失对于来我们来说是一个重大的损失,毕竟有些数据不是花钱就能买...

    MAC先森
  • 高吞吐实时事务数仓方案调研 flink kudu+impala hbase等

    腾讯云数据仓库PostgreSql TDSQL,PingCAP的TiDB,阿里的OceanBase,华为云DWS,都是HTAP的业内常用数仓,可以一站式解决需求...

    大鹅
  • Spark/Flink/CarbonData技术实践最佳案例解析

    当前无论是传统企业还是互联网公司对大数据实时分析和处理的要求越来越高,数据越实时价值越大,面向毫秒~ 秒级的实时大数据计算场景,Spark 和 Flink 各有...

    王知无-import_bigdata
  • 基于 Flink SQL CDC 的实时数据同步方案

    Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家...

    Spark学习技巧
  • Flink1.4 状态概述

    有状态的函数和算子在处理单个元素/事件时存储数据,使得状态state成为任何精细操作的关键构件。

    smartsi
  • Stream SQL的执行原理与Flink的实现

    本文作者:张茄子,来源于专栏:https://zhuanlan.zhihu.com/p/59643962

    王知无-import_bigdata
  • Flink从1.7到1.12版本升级汇总

    最进再看官方flink提供的视频教程,发现入门版本因为时间关系都是基于1.7.x讲解的. 在实际操作中跟1.12.x版本还是有差距的, 所以整理一下从1.7 版...

    王知无-import_bigdata
  • Flink,Storm,SparkStreaming性能对比

    Yahoo 的 Storm 团队曾发表了一篇博客文章 ,并在其中展示了 Storm、Flink 和 Spark Streaming 的性能测试结果。该测试对于...

    用户6070864
  • Flink,Storm,SparkStreaming性能对比

    该应用程序从 Kafka 消费广告曝光消息,从 Redis 查找每个广告对应的广 告宣传活动,并按照广告宣传活动分组,以 10 秒为窗口计算广告浏览量。 10 ...

    实时计算
  • Flink基础:实时处理管道与ETL

    Flink的经典使用场景是ETL,即Extract抽取、Transform转换、Load加载,可以从一个或多个数据源读取数据,经过处理转换后,存储到另一个地方,...

    用户1154259
  • 超越Storm,SparkStreaming——Flink如何实现有状态的计算

    流式计算分为无状态和有状态两种情况。无状态计算观察每个独立的事件,Storm就是无状态的计算框架,每一条消息来了以后和前后都没有关系,一条是一条。比如我们接收电...

    用户6070864
  • 超越Storm,SparkStreaming——Flink如何实现有状态的计算

    Storm需要自己实现有状态的计算,比如借助于自定义的内存变量或者redis等系统,保证低延迟的情况下自己去判断实现有状态的计算,但是Flink就不需要这样,而...

    实时计算
  • 日均百亿级日志处理:微博基于Flink的实时计算平台建设

    黄鹏,微博广告实时数据开发工程师,负责法拉第实验平台数据开发、实时数据关联平台、实时算法特征数据计算、实时数据仓库、实时数据清洗组件开发工作。

    Spark学习技巧
  • 「大数据分析」寻找数据优势:Spark和Flink终极对决

    当涉及到大数据时,流计算和它所带来的实时强大分析的重要性是不可避免的。此外,当涉及到流计算时,无法避免该领域最强大的两种数据处理引擎:Spark和Flink。

    首席架构师智库

扫码关注云+社区

领取腾讯云代金券