百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

演讲 | 如何高效开发实时数据分析应用

ccwgpt 2025-02-28 15:05 41 浏览 0 评论

在星环大数据技术峰会深圳站中,星环的流产品研发经理杨俊给大家做《如何高效开发实时数据分析应用》的演讲。实时流处理一直是很多行业特别需要但门槛又特别高的技术,星环的产品可以让用户实现快速应用,易操作。小编特此推出演讲全文,供大家回味。

以下是演讲全文

首先了解一下为什么使用实时技术。

这里有几张图:

第一张图是风电的应用。那风电应用为什么需要实时技术呢?以前没有这个技术的时候,它的延迟比较高,一旦有发电机组发生问题,它很晚才能反映过来去维修。这样就耽误了最佳维修时间,也会产生资源的浪费。若此时运用分布式的消息队列加上分布式的流处理,就可以使其达到秒级的实时预警效果。

第二张图是代表金融相关的一些问题。没有实时处理技术的时候,它们往往是在每天下班之前跑一下系统,评估公司的资产和风险状况。运用批处理的话,是将所有的市场数据进行估计运算,计算很多风险值。在这里如果有分布式的实时处理系统,它会在每次市场数据变化的时候重新计算一下公司的估值状况和风险情况,所以当下单结束或者市场交易结束的时候,我们拿到的已经是最新的市场数据,只需要进行查询和返回就可以了,不需要额外的计算。对于上层领导和监管部门来说,如果能及时反馈这些信息的话,可以帮助他们达到更好的决策效果。

最后一张图是交通部门秒抓套牌车的例子。以前没有实时处理的时候,很难想象交警会在下一个红绿灯口等着套牌车过来,也就是在实时处理的情况下,我们彻底改变了这个抓套牌车的场景。也就是说很多业务在原来批处理的角度是不可能实现的。以上是我简单举了几个实时处理的例子。其实类似的例子还有很多,星环的很多客户也已经开始运用我们的实时处理技术,效果都不错。

我的标题是如何高效开发实时数据分析应用,我们公司是从13年开始运用spark streaming来做实时应用,当时也遇到很多困难。

首先就是入门门槛是很高的。无论是我们和客户合作来推动应用的实现,还是和合作伙伴共同推动应用的实现,当时都是很困难的,写出来的应用质量不高。因为实时应用对性能要求很高,所以对代码质量的要求也比较苛刻,如果用spark streaming呢,需要对这个编程模型了解的比较清楚才可能写出高效的代码。所以对于程序员来说,这块的开发成本比较高。

另一方面,迁移成本很高。如果有一个公司,它想要把本身批处理的业务往实时处理的方向迁,那对于原来使用SQL的业务分析人员来说,让他们在转到spark streaming上就比较困难了。我们有的客户原来拥有的PL/SQL的代码量已经是几十万行了,让现有业务分析人员全部弄清楚都是很困难了,别说我们再将这些代码改写成spark streaming了,成本可能就高的离谱了。

最后一个问题就是产品化差。原来运维人员可能只需要会看几个常见错误就行了,但是现在这种写代码方式可能出现各种各样的问题,无法区分是框架本身的错误还是他代码的bug,他就需要去找程序员看出错误然后再解决,不仅麻烦,时间周期也比较长。

综上所述,我们认为直接使用编程的方式是不够高效的。所以我们从去年6月开始就想要完全采用SQL来写实时处理。

接下来有一个非常直观的例子。


左边这部分是用spark streaming 写的代码,这里还不是完整版,完整的需要2页ppt才能展示。如果用SQL写,就只需要右边的这几行代码了。这几行主要就是对test表根据一定的排列方式输出查询结果。这个SQL看上去就比较直观,稍微有点SQL经验的人都可以容易的看懂这些代码。如果让分析人员看左边的代码,那就比较困难了。

而且,右边的SQL代码还可能写的比左边的代码更高效,因为我们在框架层做了更多的优化。

接下来是stream SQL的框架图,分为三层。



最下面是存储层,在这一层上,我们的SQL可以对接各种存储层,例如ORC,Hyperbase,holodesk,Oracle等等。

中间层计算层中,我们对它的改动还是比较大的。对输入有一个Sourcemanager来控制,比如有多个表的时候要怎么去共享内存中的数据。然后有一个Application manager来管理过来的SQL是怎么运行的,运行周期是怎么样的,用户需不需要展开运行值或者状态信息。接下来,Distributed Execution Engine是我们集中改造的,这个引擎无论是对SQL还是执行计划的执行都是进行了比较高的优化的。Storage manager从用户的角度来说,比如存了一些东西,它到底是在内存里还是硬盘里面,中间的这些问题用户是不需要考虑的,我们再这里有一个透明层已经帮你解决掉了,而你是感觉不到我们在这里做的透明层的。Sink manager是和存储层和输出打交道的。比如我要输出到Hyperbase,sink manager就会考虑需要用分批存储的方式,因为这个方式性能比较高。

最后上层就是一些接口层,Inceptor这边你可以用SHELL直接打开连接数据库,或者用JDBC和ODBC来做steam SQL的连接操作,然后通过SQL compiler去把执行计划输入到下面的计算层中。我们还支持一些数据挖掘的接口,到目前主要是支持R语言,之后会有一些SQL的对接和图形化的对接。

那接下来支持语法的部分基本上和我们的数据仓库的语法是相同的,因为我们完全是从Inceptor那一套语法过来的。

SQL2003除了少数无法支持的语法之外,支持程度达到98%以上。这其中比如流上的数据是持续不断的数据,如果你要对它前一秒的数据在流上做修改其实是没有意义的,所以这块我们是不支持的。此外,我们还有一些额外的语法,主要是为了在流上面做更好的特殊化处理,因为原来的语法集是不能完备的支持流上面的特殊处理的。

另外,我们还支持Oracle的PL/SQL和DB2的PL/SQL,其实,支持PL/SQL的目前在这个地球上只有我们一家 :p

接下来我分享一下我们的一些经典案例场景。

第一个是有关于权限控制。团队来了新人,想基于生产集群的数据额外开发一些新的功能,这时候就需要比较高效的开发。或者现在有用户想查看某些信息,但是一些敏感信息只有管理员才能看到。另外,公司里的多租户环境中,多个租户同时在同一台机器上运行程序,不会相互干扰。



对于以上问题,我们抽象出了一个Application的概念,例如图中这个新用户叫做Emily,刚进公司把她归在一个testapp里面,你可以赋予她各种权限。比如她有权利在testapp里创建流应用,她有权利去看当前正在运行的分析系统,她有权利去启动一些以前存储过的存储过程。类似的,公司里可能还有一群人group1,对应他们有一个应用叫app1。如果现在Emily想去看group1的app1里的东西,不给她赋予一个特殊的权限,她是没办法看到的,所以我们就做到了一个这样的隔离。



具体来说是这样的,首先要去创建一个testapp,就是create application testapp,然后把相应的权限都赋给Emily。这样做了之后,一般来说到对应的testapp里去查相应的权限是可以查到Emily有权限的,但是她到另外一个生产集群上去做相应的操作,是没办法成功的。另外,我们的List命令是可以查询到一般的运行状态的,比如现在跑了多少task,运行了多长时间,在什么状态,有没有什么问题等等。额外的信息我们是不给普通权限的人开放的,需要有管理员信息才可以到4040页面查看。最后,不同租户之间,例如刚才的testapp和production之间做到彻底隔离互不干扰。



接下来的第二个案例是ETL任务的例子,像刚开头说到的风电的例子和交通稽查布控的例子其实就是他们主要用我们的系统做ETL任务。



如果有一些实时数据进来,我可能有需求要把他们存储起来,录入到某个库里面,或者后来需要做现场分析,我们要录入holodesk内存表,之后做查询。这就是一个非常常见的ETL任务,无论在什么行业里,当前这个用到的是比较多的。若这个步骤要用编程实现,工作量还是蛮大的,有很多问题需要考虑,接口怎么处理等等。如果是用我们的产品,你可以用过JDBC或者ODBC对接我们的StreamSQL,通过Stargate导到各个不同的数据库里,比如对Hyperbase做一个实时的检索,Holodesk可以做实时的交互分析,HDFS可以做统计分析和跑批等等。我们甚至可以把结果在写回Kafka,给下一个应用做实时告警。



接下来就是实现过程。首先创建流,然后创建几张表如图,最后启动流的时候只需要图中这几行SQL,你的ETL就完成了。其实就是需要这样几行SQL就可以实现流应用,当然,一开始你也可以加入聚合、复杂计算等,但是这也只是一个SQL的复杂化问题。



最后因为时间关系,我们就不详细介绍剩下两个案例。第三个是网站实时统计的一个场景,需求我列在ppt里,其实我们也只需要下面这张ppt里的几行SQL就可以解决。

最后一个案例是比较复杂的金融期货的案例。简单来说,整个过程就和刚才差不多,就不断的create一些stream表,不停的在stream表上做一些转化,再加上一些窗口函数,最后就可以实现一些很复杂的业务。

相关推荐

土豪农村建个别墅不新鲜 建个车库都用框架结构?

农村建房子过去都是没车库,也没有那么多豪车,一般直接停在路边或者院子里。现在很多人都会在建房子的时候留一个车库,通过车库可以直接进入客厅,省得雨雪天气折腾。农村土豪都是有钱任性,建房子跟我们普通人不一...

自建框架结构出现裂缝怎么回事?

三层自建房梁底与墙体连接处裂缝是结构问题吗?去前帮我姑画了一份三层自建房的图纸,前天他们全部装修好了。我姑丈突然打电话给我说他发现二层的梁底与墙分离了,有裂缝。也就是图纸中前面8.3米那跨梁与墙体衔接...

钢结构三维图集-框架结构(钢柱对接)

1、实腹式钢柱对接说明1:1.上节钢柱的安装吊点设置在钢柱的上部,利用四个吊点进行吊装;2.吊装前,下节钢柱顶面和本节钢柱底面的渣土和浮锈要清除干净,保证上下节钢柱对接面接触顶紧;3.钢柱吊装到位后...

三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!

绘创意设计乡村好房子设计小编今日头条带来分享一款:三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!本案例设计亮点:这是一款三层新中式框架结构自建房,占地13×12米,户型占地面积...

Casemaker机箱框架结构3D图纸 STEP格式

农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相

回老家闲逛,竟发现个有意思的现象:村里盖新房,十家有八家都选了"半框架结构"。隔壁王叔家那栋刚封顶的二层小楼,外墙红砖还露着糙面没勾缝,里头的水泥柱子倒先支棱得笔直,这到底是啥讲究?蹲...

砖混结构与框架结构!究竟有何区别?千万别被坑!

农村自建房选结构,砖混省钱但出事真能保命吗?7月建材价格波动期,多地建房户因安全焦虑陷入选择困境——框架结构虽贵30%,却是地震区保命的关键。框架柱和梁组成的承重体系,受力分散得像一张网。砖混靠墙硬扛...

砖混结构与框架结构,究竟有何区别?千万别被坑!

农村建房选砖混结构还是框架结构?这个问题算是近期留言板里问得最多的问题了。今天咱们说说二者的区别,帮您选个合适的。01成本区别假如盖一栋砖混结构的房子需要30万,那么换成框架结构,一般要多掏30%的费...

6个小众却逆天的App神器,个个都是黑科技的代表

你的手机上有哪些好用的软件?今天我就给大家分享6个小众却逆天的App神器,个个都是黑科技的代表!01*Via浏览器推荐理由:体积极小的浏览器,没有任何广告。使用感受:它的体量真的很小,只有702KB,...

合肥App开发做一个app需要多少钱?制作周期有多久?

在移动互联网时代,开发一款APP已成为企业数字化转型与个人创业的重要途径。然而,APP的开发成本与制作周期受功能复杂度、技术架构、团队类型等多重因素影响,差异极大。好牛软件将从这两个维度展开分析,帮助...

详解应对App臃肿化的五大法则

编者注:本文转自腾讯ISUX。先来看一张图:图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的...

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

需求背景春节活动中,多个业务方都有发放优惠券的需求,且对发券的QPS量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级QPS的券系...

8种移动APP导航设计模式大对比

当我们确定了移动APP的设计需求和APP产品设计流程之后,开始着手设计APP界面UI或是APP原型图啦。这个时候我们都要面临的第一个问题就是如何将信息以最优的方式组合起来?也许我们对比和了解了其他一些...

数字资产支付 App 的技术框架

开发一款功能强大、安全可靠的数字资产支付App需要一个整合了区块链技术、后端服务、前端应用以及第三方集成的全栈技术框架。这个框架的核心在于保障数字资产的安全流通,并将其高效地桥接到传统的法币支付场...

从MyBatis到App架构:设计模式全景应用指南

从MyBatis到App架构:设计模式全景应用指南引言在企业级应用和服务端开发领域,MyBatis凭借其灵活、简洁、强大的ORM映射能力被广泛应用。而它之所以能拥有如此优秀的可扩展性和工程可维护性,正...

取消回复欢迎 发表评论: