社会需求和科技进步是螺旋式相互促进和提升的。“大数据”一词最早由Roger Mougalas在2005年提出,所以我们姑且认为2005年是大数据时代的元年吧。
大数据技术之所以出现,是因为社会发展的程度已经开始要求我们具备处理海量数据的能力。之后,大数据技术逐渐发展和日趋完善的过程又反过来进一步促进社会产生更多、更丰富的数据。
随着大数据技术的普及,IBM公司为我们总结了大数据的五大特点(也称为5V特点),即Volume(大量)、Velocity(快速)、Variety(多样)、Veracity(真实)和Value(价值),如图1-1所示。
▲图1-1 大数据的五大特点
大数据时代为人们带来了丰富多彩的生活方式,让人们充分享受着从大数据中挖掘而来的价值。但也正因为大数据产生得太多太快,让我们开始疲于对正在发生的事情做出及时反应。
是的,面对无穷无尽的数据洪流,我们急需一种手段来帮助我们抓住并思考那些一闪而逝的瞬间。在这样的背景下,实时流计算技术应运而生。
虽然不能像电影《超体》中女主角直接用手抓住并分析电磁波信息那样,但至少实时流计算技术能够帮助我们抓住数据流的瞬间,分析并挖掘出数据的实时价值。
千万不要小瞧了数据的实时价值。据说在很久以前的欧洲战场上,每次最先知道战争结果的不是后方的政府机构,而是股票交易所里的那些股票投资者。
俗话说,时间就是金钱,效率就是生命。所有实时流计算的目的都是为了获得数据的实时价值。如果数据没有实时价值,那么实时流计算也就失去了它存在的意义。
话说有一句至理名言:“天下武功,无坚不摧,唯快不破!”由此足可见“快”的重要性。更快、更完整地获取数据,更快、更充分地挖掘出数据价值,已成为大数据时代各行各业的共识。
在线系统监控、移动数据和物联网、金融风控、推荐系统等,虽然行业各不相同,但是它们有个共同点——实时流计算技术在这些领域发挥着越来越重要的作用。
1. 在线系统监控
互联网行业蓬勃发展的背后,是各家企业机房里成千上万的服务器。服务器在7×24小时(传说中的007工作制)的作业过程中产生大量监控数据。
这些数据包含着服务器本身的健康状况,如硬件状态、资源使用情况和负载压力等。第一时间知道服务器的健康状况是非常重要的,可以避免因为一台服务器宕机而后续造成的各种雪崩效应。
除了服务器本身以外,复杂的线上业务系统产生着更多的数据。如今一个每天亿万级别访问量的系统已经司空见惯,产品花样更是层出不穷。业务系统产生日志的数量级由GB变TB,再由TB变PB。
将线上日志导入实时流计算系统,我们可以实现一系列有实时价值的功能。
通过实时流计算技术,实时展现业务系统的健康状况,提前避免可能的业务故障,最大程度优化业务使用服务器的成本,抢先发现新的业务模式和商机……这些都是实时流计算技术在在线系统监控领域价值的体现。
2. 移动数据和物联网
移动终端、智能交通、共享单车、5G、工业4.0……如今在我们生活的时代,一波又一波的新名词层出不穷。“移动”和“物联”让数据变得随时随地可得。数据越来越多,单位数据自身的价值却越来越小。实时处理海量数据洪流,已成为移动和物联网领域的当务之急。
例如,对于智能交通系统,传统智能交通系统采用离线方式对交通数据做分析,交通决策不能及时做出;而通过对交通数据流进行实时分析,实时展现交通热点路段、优化信号灯配时、指导行车线路,可实实在在减轻当前热点路段压力、缩减平均行车时间,如图1-2所示。
▲图1-2 基于Spark Streaming的Uber交通热点路段分析及可视化系统
像智能交通这样,优化生活环境,正是实时流计算技术在移动数据和物联网领域体现的价值之一。
3. 金融风控
金融风控是实时流计算技术又一常用领域,如图1-3所示。通常针对贷款的风控,可以分为贷前、贷中和贷后。在贷中和贷后,大多采用离线数据分析和数据可视化技术来实现风险控制。
▲图1-3 基于Flink的实时欺诈检测平台
但是在贷前,特别是在许多现金贷产品中,为了给用户带来更好的产品体验,必须在很短的时间内对用户的信用、还款能力和还款意愿等做出评估。除了针对用户本身的信用风险作分析外,还需要防止金融欺诈问题,如“薅羊毛”和多头借贷。
通过实时流计算技术,在秒级甚至亚秒级,对用户信用和欺诈风险做出判定,在保证可控风险的同时,提供良好的用户体验,进一步提高现金贷产品整体的竞争力。
4. 实时推荐
实时推荐是实时流计算技术的另一个常见应用场景。如今手机几乎成为每一个年轻人的必备品。打开手机,听音乐、浏览新闻、阅读小说、看到心仪的东西买买买……
有一天你突然发现,手机应用越来越了解自己。它们知道推荐什么样的音乐、新闻、小说和商品,并且推荐的东西大抵还是你所喜欢的。
现代推荐系统(见图1-4)背后越来越多地出现了实时流计算技术的影子,通过实时分析从用户手机上收集而来的行为数据,发掘用户的兴趣、偏好,给用户推荐可能感兴趣的内容或商品。或许很多人并不喜欢这种被机器引导的感觉,但是我们还是不可避免地越来越多地被它们所影响。
▲图1-4 基于Spark Streaming的实时零售推荐系统
这里只是简单地列举了几个流计算技术使用的场景。其实在越来越多的行业,很多传统上用离线批处理技术完成的事情也逐渐转变为采用实时流计算技术完成。所以,读者不妨大胆发挥想象力,试着将实时流计算技术运用到生活的各个方面去,挖掘实时信息的潜在价值,说不定就会获得一份惊喜。
本节介绍了实时流计算技术的使用场景。实时流计算技术的处理对象是实时流数据。尽管实时流数据的来源千变万化、丰富多彩,但归纳起来,实时流数据通常具有实时性、随机性、无序性和无限性。
1. 实时性
之所以要采集实时流数据,并对其进行实时处理,是因为这些数据具有实时价值。例如,提前预警避免火灾,贷前反欺诈避免骗贷,量化交易抢得市场先机等。如果事后再分析这些数据,这个时候火灾已经发生,骗子已经卷款而逃,市场机会已经错过,分析数据带来的价值也只限于“前事不忘,后事之师”了。
因此,对实时流数据的计算和分析一定要在其实时价值消退之前完成,这就要求计算的时延必须小。有时候数据量大、计算复杂的原因会导致实时计算无法完成,这时甚至会牺牲结果的准确性,在保证误差在可接受范围的前提下,优先满足计算的实时性。
2. 随机性
流数据是真实世界发生各种事件的体现。真实世界事件的随机发生,使得流数据的产生在时间和数量上具有随机性。有时候在很长一段时间内只产生少量数据,有时候又会在很短时间内产生大量数据。
实时流数据的随机性对实时流计算系统在各种流量和突发情况下的处理能力与服务稳定性提出要求。我们可以从数据采样、数据缓冲、计算资源动态调整3个角度来解决实时流数据随机性的问题。
有些情况下,流数据量很大,暂时超过了系统的处理能力,如果业务需求允许,则可以考虑丢弃部分数据,或者使用带采样性质的算法,减少计算压力。如果数据不允许丢失,则可以采用带缓冲和持久化能力的消息中间件来暂时缓冲数据,让系统平稳处理数据流,削平流量高峰。
另外,在一些资源敏感的情况下,可能还需要实时流计算系统能够根据流量压力情况,动态增加或减少计算资源,使得在满足实时流计算的同时,最大化计算资源的使用效率。
3. 无序性
流数据是一个关于时间的事件序列。我们通常希望事件会按照它们发生的时刻依次到达系统,但由于异步、并发、网络延时、时间不同步和系统故障等诸多原因,严格意义上的全局有序是很难保证的,甚至几乎不可能。
于是退而求其次,我们可以让数据在局部时间窗口内有序。在目前主流的实时流计算框架中,常见的做法是将接收到的事件,按时间戳分发到一个个的时间窗口分片中,在等待一段时候后,再触发时间窗口分片内数据的统一处理操作。
流数据中的时间有两类:事件发生时间和事件处理时间。事件发生时间是指事件发生的时刻,而事件处理时间则是系统处理事件的时刻。这两种时间会导致流计算的过程和结果都有所不同,具体使用哪种时间因场景而异。
4. 无限性
流数据是一种随时间无限增长的数据序列。这是流数据和批数据最本质的区别。批数据在每次处理时数据量是有限的,而流数据没有“每次”的概念,它总在不断产生,无穷无尽。流数据和批数据的区别,导致它们在系统架构和算法实现上都有所不同。
在系统架构上,实时流数据的无限性要求系统必须具备高可用性和实时处理能力。一方面,当系统发生故障时,如果系统没有高可用性,则流数据会丢失,并会暂停流计算。这与实时流计算的目标(即在实时流数据上获取实时价值)是相违背的,因此不可容忍。
另一方面,当系统处理能力不能跟上数据流产生的速度时,待处理的消息会越积越多。当积压数量超过阈值后,具有有限存储空间的系统必然会崩溃。为了消除已经存在的积压消息,系统处理能力必须超过数据流产生的速度,否则积压情况会一直存在。
在算法实现上,实时流数据的无限性对原本针对批数据设计的算法提出挑战。一方面,实时流计算过程中的可用空间和可用时间都有更严苛的限制;另一方面,流计算的输入数据随时间无限增加,这和批处理算法的输入是有限数据集有本质区别。因此,实时流计算使用的算法相比批处理算法,在算法实现和算法复杂度方面会有明显不同。
在实时流数据的四大特点中,无限性是流数据相比批数据最大的区别,这直接导致了流处理和批处理的查询模式有所不同。批处理是在固定数据集上进行不同的查询,而流处理是在无限数据集上进行固定的查询。实时性、随机性和无序性既是实时流计算系统的特点,也是我们要解决的问题。