vlambda博客
学习文章列表

十分钟带你入门流式计算


流式计算这四个字在最近几年很火,在大数据相关的文章中经常能够看到。有的小伙伴在圈内混迹多年,对流式计算比较了解了。但还有一些小伙刚买了门票,夹着马扎、抱着西瓜,才推门进来,听着圈内评书大佬说着“书接上文……”,一脸蒙圈:上文在哪里?

这里咱就把上文给各位求知若渴的小伙伴说道说道,也让咱们小伙伴在圈内混的时候,依然能够保持那份淡定优雅和迷之自信。在气质这块,必须要拿捏的死死地。

有界数据和无界数据

要说流式计算,必须得先说说有界数据和无界数据的区别。顾名思义,有界数据就是有边界的数据,有头有尾,有始有终,以终为始,始乱终弃……额,有点跑偏。总之,就像小池塘一样,水就那么多,你看着用吧。无界数据呢,就像小溪、像黄河、像长江,水是一直流的,一直到天荒地老,没完没了。

批式计算处理的是有界数据,流式计算处理的是无界数据。有界数据和无界数据的核心差别就这么多,是不是看上去差别也没那么大?too young,too simple,too naive了。两者差别大了去了。

不慌,咱们慢慢捋一捋,看看这5000块钱到底是谁喊嘀。一千、一千五、两千、两千五、三千……额额,车子又有点跑偏。

流式数据的连续性和窗口机制

假设有这么这么一个鸡血的爸爸,立志让自己的儿子当数学家。万里长征第一步,先从数数开始。就指着一条河说,我给你定个闹钟,从定好闹钟,到闹钟响,你数数中间有几条鱼游过去了,好不好?每次我定1分钟。可怜的小孩,看着远处吃着冰激凌,放着风筝的别人家的娃娃,明白了一个道理:有个靠谱的爸爸多么重要。

没办法,数吧。每过一分钟,小孩就报个数,游过去了5条、游过去了4条、游过去了10条、游过去了3条。

这里的1分钟,就是一个滚动窗口,在滚动窗口内,完成数据的处理。这里就是数鱼(统计)。滚动窗口互相不重叠,1分钟窗口结束后,再开始下一个1分钟窗口。

数着数着,爸爸觉得无聊了。想自己偷会懒。于是,他想了一个主意:他告诉儿子,你在这里一直数着,我回趟家。你要记住,我回来的时候,你要告诉我我回来前5分钟有多少条鱼游过去。我C,难度直线升级!有没有考虑过儿子的年龄?!咋数,咋记?

小孩现在惨了,他不知道爸爸什么时候回来,他既要数着鱼,还要记着每条鱼出现的时间。当然,超过5分钟的,就可以从记忆中抹除掉了。

这个呢,就是滑动窗口,5分钟窗口不断滚动前进,窗口内的数据不断的被处理和计算。这里就是数鱼了。滑动窗口是重叠的。

这还没完,这个爸爸啊,秉承着生命不息,折腾不止的人生理念。他让儿子换了一种数法,跟儿子说:宝贝啊,这样啊,每次有这么大鱼(比划了一下)的时候呢,你就开始数,再出现这么大的鱼的时候呢,你就停下,告诉爸爸两条大鱼之间啊,有多少条小鱼游过去好不好?呵呵,还用疑问句,好像我能不同意一样。数吧。

这里的两条大鱼之间的时间间隔,就不是固定的了,可能3分钟,可能10分钟,也可能1个小时,就看大鱼什么时候来了。这个时间窗口,叫做会话窗口。很典型的场景是,我们浏览一个网页,从打开、浏览到关闭,这是一个会话窗口。感兴趣的网页,浏览的时间长,不感兴趣的,打开后可能马上就关闭了。

有状态管理和一致性语义

还是前面数鱼的故事。小孩子,做这么枯燥的事情,难免会分心,小猫钓鱼还三心二意呢,是吧?然后,经典故事来了:小孩数着数着,一直蝴蝶飞来了,他开心的去追蝴蝶玩了,一只蜻蜓飞来了,他又开心的追蜻蜓玩去了。过了会回来后,突然意识到一个严重的问题,我数到哪了?

十分钟带你入门流式计算

这就是流式计算中的一个典型处理类型:有状态处理。有状态指的是前面的事件影响着处理的结果。这里数鱼就是典型的有状态处理,每个时刻数到的鱼数量,是以前数的条数加上刚刚数的条数。

刚才这个小孩出去追蝴蝶,追蜻蜓,在数据计算中,就算是处理异常了,比如宕机、卡顿、掉电等。

等这个小孩再回来重新数的时候,能不能记得以前数到哪条鱼,继续接上,这就要看他的本领了。

如果他完全记不清楚数到哪条鱼了(但记得总共数了多少条),那就还是站在原地,接着数下去。带来的问题就是,有漏网之鱼!他去玩的那段时间,游过去的鱼,就被漏数了。这就是一致性语义中的At Most Once。意思是每条鱼最多数一次,绝对不会重复数了。

另外一种情况是,娃娃回来后,赶紧顺着河流往下游跑。他估摸着玩了5分钟,但为了保险起见,他跑出去10公里,鱼游得都没他远。停下后接着数。这样,就有一些鱼被重复数了。但小孩的原则是:宁可重复数1万,不可漏数1条。这就是一致性语义中的At Least Once。意思是每条鱼至少数一次,绝对不会漏(但会重复数)。

明眼人肯定就看出来了,上面这两种情况处理的都不支棱。作为严谨的理工科生,怎么能允许至少、最多这样的模糊性字眼出现呢,必须是确定、一定以及肯定,必须是one hundred percent!

十分钟带你入门流式计算

能够安抚我们这个暴躁的心的,必须得是周瑜周公瑾(听名字就严谨),诸葛在世孔明重生都不行。这里的周瑜周公瑾,说的就是exactly once,绝对的刚刚被处理一次。哪条鱼数过,哪条鱼没数过,一清二楚,了然于心,哪怕分心走神,哪怕大江东去浪淘尽我数的那条鱼,我也能观星占卜、掐指妙算,让刘伯温附体,观音菩萨显灵,找到那条逃跑的鱼。

当然了,这个听上去就很难。这也是评价一款流式计算引擎优劣的关键指标之一。

数据乱序和watermark

一年之后,孩子长大了一岁,老爸的要求又提高了一些。这次,我们假设河里游泳的鱼,都是住在上游的鱼游到下游去旅游,并且呢,每条鱼都属于一个家庭。出游也是以家庭为单位的。即有大量的鱼家庭从上游出发,到下游来旅游。同时假设每个家庭的鱼,都有自己的特征,比如颜色、外形等,反正是一眼能看出来哪些鱼是一家的。老爸的新要求不再只是数鱼了,这次要捞鱼。同一个家庭的鱼,要捞进同一个桶里。不同家庭的鱼,分在不同的桶里。并且小孩要尽量快的告诉爸爸每个家庭有多少人口(多少条鱼)。

同一个家庭的鱼出游,基本是相同时间出发,或者依次在很短的时间内顺序出发。但有的鱼游得快,有的游得慢。游得快的到小孩在的位置的时候,游得慢的可能还在很远的后面。如果老爸不要求,可以多等会,比如等上一天,再慢的鱼也游到了,他可以很自信的告诉老爸,每个家庭有多少条鱼。但老爸要求数好了尽快告诉他,不能耽搁。那么问题来了,小孩怎么知道还有多少条鱼(同一个家庭的)在后面,要等多久再告诉爸爸才合适呢?

十分钟带你入门流式计算

有的鱼有的快,有的鱼游得慢,按照顺序依次出发,到达的顺序却乱了,这就是数据乱序。

同一个家庭的鱼要放进同一个桶里,可以认为是应用系统需要这些数据计算一个结果,要等到所有数据到来才能准确的得出结果。

在乱序的情况下,要尽可能快的输出尽可能准确的结果。这里就用到了watermark。

在这个故事中,假设有一个非常有经验的大孩子,告诉小孩说,我也有一个同样的老爸,我也像你一样数过鱼和捞过鱼,我知道一般情况下,第一条鱼到这里后,5分钟内,最后一条鱼肯定能到。你最多等5分钟,就可以告诉你爸爸结果了。

十分钟带你入门流式计算

这里的5分钟,是个经验值,虽然不能100%保证在5分钟内同一个家庭的鱼能够全部到达(总有例外,比如有的鱼贪玩,在沿途玩上半天也是有可能的),但99%的情况下,是能保证的。99%的概率就足够了。牺牲了1%的特殊情况,赢得了相对及时的结果输出(否则要等上1天,谁也受不了)。

小孩从捞到第一条鱼开始,进行5分钟计时。5分钟到了后,闹钟响起,响起的这个声音就是watermark。小孩听到声音(接收到watermark),就不再等待,数数桶里的鱼,告诉爸爸结果。

流量波动和反压

河里的鱼,有时候少,有时候多。少的时候,小孩还能数的过来,多的时候,就有点手忙脚乱,容易数漏、数错。每当鱼太多,小孩数不过来的时候,他就拿起大喇叭,朝着上游喊,你们慢点游,我这数不过来了。神奇的是,鱼竟然能听得懂,还很听话。好吧,感觉故事开始往神话的方向挪步了。

鱼有时多有时少,就是流量波动。小孩拿着喇叭喊话,就是反压,告诉上游发数据慢点。

当然,反过来也是一样的。鱼很少的时候,小孩闲的慌,也可以拿起喇叭,跟上游的鱼说,快点游过来。

故事讲得差不多了,相信大家以后路过河边的时候,一定会忍不住看看有没有那么一个小孩的。O(∩_∩)O哈哈~。

时间不早了,也到了插播广告的时间了,毕竟,我们做宣传也是认真的。

产品 · 推介

中兴飞流流式计算引擎Yita

Yita 是中兴飞流信息科技有限公司基于最前沿的、具有颠覆性的数据流理论,通过自主创新研发出来的新一代异步大数据高性能处理平台。Yita 基于内存计算,具备全面复杂数据分析和计算能力,是下一代大数据核心处理引擎的典型代表和佼佼者,也是国内首家具有完整自主知识产的商用大数据系统。

Yita 计算引擎具备完备的数据计算处理能力,可以分别支持流计算、批处理、图计算、机器学习、交互计算,适用于各行各业需求和业务发展。

(Yita逻辑架构)

在Yita计算框架中,计算、存储和IO资源被虚拟化,交由自有的调度系统进行分配和调度,在全流程上实现资源动态调配,大大提高资源利用率,实现在同样服务器的情况下,处理效率高于传统计算引擎几倍甚至十几倍。

在窗口支持上,Yita实现了对会话窗口的支撑。

在状态管理上,Yita实现Exactly Once的语义一致性,达到一流流式计算引擎的水平。

反压机制和Watermark在Yita中全部得以实现,在出现数据的流量波动,系统的宕机掉电等故障时,能够从容应对。

同时,作为融合计算引擎,Yita 支持基于Lambda架构的流批混合计算,极为便利地满足更加复杂场景对计算性能的需求。

流式计算价值

通过大数据处理我们获取了数据的价值,但是数据的价值不是恒定不变的。越来越多的数据,在产生之初的价值最高,随着时间的推移,价值迅速减少。流处理的关键优势在于它能够更快地提供洞察力,通常在毫秒到秒之间。

流式计算的价值在于业务方可在更短的时间内挖掘业务数据中的价值,并将这种低延迟转化为竞争优势。比如在某省移动,中兴飞流的Yita帮助移动公司在更短的时间内分析出用户的上网行为变化,应用到实时推荐模型中,大大提升了推荐的效果。

流式计算能做到这一点的原因在于,传统的批量计算需要进行数据积累,在积累到一定量的数据后再进行批量处理;而流式计算能做到数据随到随处理,有效降低了处理延时。

随着5G网络的全面建成,基于5G的业务迅速发展,越来越多的场景下,会用到流式计算。在流式计算全面普及的情况下,速度的比拼、时延的比拼将成为竞争的主要方面。中兴飞流拥有深厚的技术储备,不断对Yita产品进行不断的迭代演进,目前的Yita 3.0版本,已经具备大规模商用部署的能力,并在多个省级运营商市场进行了商用,性能表现和稳定性获得了客户的高度认可。