Flink可查询状态Queryable State:替换你的数据库-程序员宅基地

技术标签: Flink  sql  

 2015年12月雅虎使用生产环境中的真实数据对Spark Streaming、Storm以及Flink等流系统计算引擎做了一项基准测试,并得到了以下的测试结果:

  我们从上图可以清楚地看到,随着吞吐量的增大,Spark Streaming的延迟也越来越大;而Storm和Flink随着吞吐量的变化延迟波动不是很大。至于为什么这样本文就不详细介绍了。雅虎的流系统基准测试有个明显的问题,就是虽然使用了真实的数据,但是整个测试经过聚合之后仅仅只有100个key,相比其它现实世界的用例,Key的数量实在是太少了。基于这些问题,Flink的母公司dataArtisans对这个基准测试进行了扩展,使用到了Tweet的数据流,每秒会更新数百万个Key,这个看起来和现实更接近,最后的测试结果如下:


 

(扩展的基准测试都懒得和Spark Streaming比较了)从上图可以看出Flink的吞吐量明显比Storm高;中间的Flink吞吐量受到了Kafka集群和Flink集群之前的带宽影响,而第三个是把Kafka集群和Flink集群放到了一个机房(也就是消除了集群机房之间的带宽影响),这样导致Flink的吞吐量达到了 15000000 events/sec 了!

  但是测试的最终结果是保持到持久化系统里面(比如Redis),然后我们把雅虎的测试和dataArtisans公司的测试结果对比一下:


 

我们发现当Key的数量在100的时候,吞吐量明显比Key数量在1000000的时候要高很多,这是因为整个系统的瓶颈是在将数据写入到持久化系统里面!写的Key数量越多,消耗的时间就越长!所以社区才会引入可查询状态(Queryable State)。

  引入可查询状态的好处将有助于消除对键值存储(key-value stores)之类的外部系统的依赖,这些键值存储在实践中经常是瓶颈,正如上图所示。将Flink内部的状态暴露给外部实际上是将数据库的很大一部分工作移动到流处理器中,这将提供高吞吐量查询,而且计算好的状态可以立即被访问。

可行性

  上节已经讨论了Flink社区引入可查询状态(Queryable State)的目的。那么在现有的Flink里面实现可查询状态(Queryable State)是否可行呢?答案肯定是可以的。我们都知道,Flink为用户提供了状态管理抽象,以保证流系统的容错处理;分区(partitioned )的状态接口实现为用户提供了不同类型的状态访问;但是这些状态在之前仅仅对Flink的内部可用,所以我们只需要把这部分的访问暴露到外部就可以让用户直接在查询里面查询Flink的状态。

可查询状态(Queryable State)实现

  上节讨论了Flink的可查询状态可行性的思路。那么在实现上又是咋弄的?关于Queryable State的实现对应的Issue是FLINK-3779,设计文档可以参考这里(需要翻墙,我已经下载下来了,点击本文下面的 点击进入下载)。下图是Flink的可查询状态实现。


 

  整个过程如下:(1)、查询客户端请求了一个可查询状态:/job/operation/state-name/key,Flink会请求State Location Server得到 key-partition 的存储位置;
(2)、而State Location Server会从ExecutionGraph中查找位置;
(3)、当 key-partition 的存储位置找到之后,会提供给查询客户端;
(4)、查询客户端根据状态存储的位置向相应的State Registry查询 state-name 和 key;
(5)、最后State Registry将结果返回给查询客户端,这样客户端就得到了相应的状态信息。

上面的整个过程并没有涉及到持久化系统,如果应用程序只对最新的实时结果感兴趣,那么这样的系统就完全可以了;如果应用程序会查询历史的状态结果,Flink的Query Service会把过去计算好的状态信息存储到持久化系统,这样用户既可以查询实时的状态信息,也可以查询历史的状态信息。

那么引入了可查询状态之后,性能变得咋样呢?测试结果如下:


如果想及时了解Spark、Flink、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

我们可以看出,引入了可查询状态之后,即使处理的Key值过多,但是其吞吐量和100个key的吞吐量差不多!性能提升很多啊。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/javawins/article/details/86673610

智能推荐

python脚本编程:实时监控日志文件_linux实时监控日志 python-程序员宅基地

文章浏览阅读5k次。用python可以很小巧轻便的实时监控日志文件增量刷新,根据某些关键字进行匹配,方便做运维异常告警代码import timeimport re# specify log file pathlog_path = "my.log"# open file and monitor newst linenumber = 0position = 0with open(log_path,..._linux实时监控日志 python

svn 分支(branch)和标签(tag)管理-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏61次。svn的分支管理_svn 分支

Python 入门的60个基础练习_练习python基础语法-程序员宅基地

文章浏览阅读4.2w次,点赞329次,收藏2.7k次。Python 入门的60个基础练习_练习python基础语法

iOS6和iOS7代码的适配(2)——status bar_ios7 statusbar-程序员宅基地

文章浏览阅读1w次。用Xcode5运行一下应用,第一个看到的就是status bar的变化。在iOS6中,status bar是系统在处理,应用_ios7 statusbar

gdb调试时No symbol "var" defined in current context && No Register_no registers调试显示-程序员宅基地

文章浏览阅读2.1k次。问题描述:,在gdb调试程序输出变量:p var,会提示No symbol "var" in current context.原因:程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个是很正常的,因为优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指_no registers调试显示

IDGeneratorUtil 主键id生成工具类_idgeneratorutils.generateid()-程序员宅基地

文章浏览阅读3.4k次。import java.util.Random;import org.drools.util.UUIDGenerator;/** * * * 类名称:GenerateIdUtil * 类描述: 主键生成工具类 * @author chenly * 创建时间:Jul 10, 2012 8:10:43 AM * 修改人: * 修改时间:Jul 10, 2012 8..._idgeneratorutils.generateid()

随便推点

VB程序设计教程(第四版) 龚沛曾_龚沛曾vb.pdf-程序员宅基地

文章浏览阅读1.6w次,点赞17次,收藏47次。VB程序设计教程(第四版) 龚沛曾 课后习题答案目录第一章课后答案第二章课后答案第三章课后答案第四章课后答案第五章课后答案第六章课后答案第七章课后答案第八章课后答案....第一章课后答案1、简述Visual Basic的特点。答:(1)具有基于对象的可视化设计工具(2)事件驱动的编程机制(3)提供易学易用的应用程序集成开发环境(4..._龚沛曾vb.pdf

Matlab神经网络语音增强,基于BP神经网络的语音增强研究-程序员宅基地

文章浏览阅读452次。曰髯?分类号:论文编号:2丛坦丝旦生丛密级:公开贵州大学2009届硕士研究生学位论文基于即神经网络的语音增强研究学科专业:电路与系统研究方向:模式识别导师:刘宇红教授研究生:周元芬中国贵州’贵阳2009年5月摘要-5Abstract-6第一章绪言11.1引言11.2语音增强的意义与研究现状21.2.1语音增强的目的21.2.2语音增强的意义21.2.3国内外语音增强研究现状41.2.4语音增强的算..._基于神经网络的语音增强

java.lang.ClassNotFoundException: org.springframework.core.io.Resource 解决办法-程序员宅基地

文章浏览阅读1.7w次。问题描述: 在使用maven依赖项spring MVC、Hibernate和Struts2构建REST web项目之后,我将项目进行打包 “ProcjectName.war”,并通过tomcat manager html页面将其上传到 Linux 的tomcat 服务器,它可以正常工作。但是当我尝试在本地tomcat服务器 (Windows平台)上部署war时,我从tomcat catali..._org.springframework.core.io.resource

添加远程github仓库时报错 Warning: Permanently added the RSA host key for IP address 52.74.223.119_cmd warning: permanently added-程序员宅基地

文章浏览阅读9.7k次。1.问题展示2.解决方案1.任意窗口, 打开git bash2.命令行界面, 输入cd C:3.cat ~/.ssh/id_rsa.pub正常下面应该显示一大串公钥如果没有,显示如下图, 则进行下一步, 创建公钥4.创建公钥, 输入 ssh-keygen5.然后一直下一步, 直到出现6.再次输入cat ~/.ssh/id_rsa.pub下面一大串数字便是公钥,复制这些字符串, 打开github, 点击头像, 打开settings, 打开SSH and GPG Keys_cmd warning: permanently added

SQL*Plus 使用技巧1-程序员宅基地

文章浏览阅读154次。[code="java"]1. SQL/Plus 常用命令 a. help [topic] 查看命令的使用方法,topic表示需要查看的命令名称。 如: help desc; b. host 该命令可以从SQL*Plus环境切换到操作系统环境,以便执行操作系统命名。 c. host [command] 在sql*plus环境中执行操作系统命令,如:host notepad.exe..._sql+plus的使用方法

域控服务器搭建与管理论文,校园网络服务器的配置与管理 毕业论文.doc-程序员宅基地

文章浏览阅读441次。该文档均来自互联网,如果侵犯了您的个人权益,请联系我们将立即删除!**学校毕 业 论 文**学校园网络服务器的配置与管理姓 名: **学 号: **指导老师:系 名:专 业: 计算机网络技术班 级:二0一一年十二月十五日摘 要随着网络技术的不断发展和Internet的日益普及,许多学校都建立了校园网络并投入使用,这无疑对加快信息处理,提高工作效..._服务器配置与应用论文