1.1 流处理欠佳的后果
谁需要和流数据打交道呢?首先映入脑海的是从事传感器测量和金融交易的工作人员。对于他们来说,流处理非常有用。但是流数据来源非常广泛,两个常见的例子是:网站获得的能够反映用户行为的点击流数据,以及私有数据中心的机器日志。事实上,流数据来源无处不在,但是从连续事件中获得数据并不意味着可以在批量计算中使用这些数据。如今,处理大规模流数据的新技术正在改变这一状况。
如果说处理大规模流数据是一个历史性难题,我们为什么还要不厌其烦地尝试打造更好的流处理系统呢?在介绍支持流处理的新架构及新技术之前,我们先来谈谈不能很好地处理流数据会有什么后果。
1.1.1 零售业和市场营销
在现代零售业中,网站点击量就代表了销量。网站获得的点击数据可能是大量、连续、不均匀的。用以往的技术很难处理好如此规模的数据。仅是构建批量系统处理这些数据流就很有挑战性:结果很可能是需要一个庞大且复杂的系统。并且,传统的做法还会带来数据丢失、延迟、错误的聚合结果等问题。这样的结果怎能对商业领域有所帮助呢?
假设你正在向首席执行官汇报上一季度的销售数据,你肯定不想事后因为使用了不准确的数据而不得不向首席执行官更正汇报结果。如果不能良好地处理点击数据,你很可能对网站点击量进行不准确的计算,这将导致广告投放报价和业绩数字不准确。
航空旅客服务业面临同样的挑战:航空公司需要快速、准确地处理从各种渠道获得的大量数据。例如,当为一名旅客办理登机手续时,需要对该旅客的机票预订数据进行核对,还需要核对行李处理信息、航班状态信息和账单信息。如果没有强大的技术来支持流处理,这种规模的数据是很难不出错的。近几年,美国四大航空公司中有三家都出现了大面积的服务中断,这几次故障都可以归咎于大规模实时数据处理失败。
当然,很多相关问题(如怎样避免重复预订酒店或演唱会门票),一般都能够通过有效的数据库操作来解决,但是这种操作相当费钱,也费精力。尤其当数据量增加时,成本会飙升,并且在某些情况下,数据库的反应速度会变得特别慢。由于缺乏灵活性,开发速度受到影响,项目在庞大又复杂或者不断发生变化的系统中进展缓慢。想要在大型系统中处理流数据,并且在保持一致性的同时有效地控制成本,难度非常大。
幸运的是,现代的流处理器经常可以用新的方式解决这些问题,这使得实时处理大规模数据的成本更低。流处理还激发了新的尝试,比如构建一个系统,该系统能够基于顾客当下购买的商品实时给出相关的建议,看看他们是否还需要买一些别的商品。这不代表流处理器替代了数据库(远远不能替代),而是说在数据库处理不好时,流处理器提供了更好的解决方案。这样做也使数据库得以解脱,不用再参与对当前业务状态的实时分析。第2章在介绍流处理架构时将对这一转变做更深入的讲解。
1.1.2 物联网
物联网是流数据被普遍应用的领域。在物联网中,低延迟的数据传输和处理,以及准确的数据分析通常很关键。各类仪器中的传感器频繁地获得测量数据,并将它们以流的形式传输至数据中心。在数据中心内,实时或者接近实时的应用程序将更新显示板,运行机器学习模型,发布警告,并就许多不同的服务项目提供反馈。
交通运输业也体现了流处理的重要性。举例来说,先进的列车系统依靠的是传感器测量数据,这些数据从轨道传至列车,再从列车传至沿途的传感器;与此同时,报告也被发送回控制中心。测量数据包括列车的速度和位置,以及轨道周边的状况。如果流数据没有被正确处理,调整意见和警告就不能相应产生,从而也就不能通过对危险状况做出反应来避免事故发生。
另一个例子是“智能”汽车,或称联网汽车,它们通过移动网络将数据传输回制造商。在有些国家(北欧国家、法国和英国,美国则刚开始),联网汽车甚至可以将信息传给保险公司;如果是赛车,信息还可以通过射频链路传送至维修站进行分析。此外,一些智能手机应用程序还支持数百万司机共享实时路况信息。
图1-1:许多情况都需要考虑数据的时效性,包括使用物联网数据的交通运输业。供数百万司机共享的实时路况信息依靠的是对流数据及时地进行合理和准确的分析(图片来源:©2016 弗里德曼)
物联网对公用事业也有影响。相关公司已经开始安装智能计量表,以替换每个月需要人工读数的旧表。智能计量表可以定期将用电量反馈给公司(例如每15分钟一次)。有些公司正在尝试每30秒就进行一次测量。使用智能计量表的这一转变带来了大量的流数据,同时也获得了大量的潜在收益。其中一个好处就是通过机器学习模型来检测设备故障或者窃电等使用异常。如果不能对流数据进行高吞吐、低延迟和准确的处理,这些新的目标都无法实现。
如果流处理做得不好,其他物联网项目也会遭殃。大型设备,比如风力涡轮机、生产设备和钻井泵,都依赖对传感器测量数据的分析来获得故障警告。如果不能及时地处理好这些设备的流数据,将可能付出高昂的代价,甚至导致灾难性后果。
1.1.3 电信业
电信业是一个特殊的例子,它广泛地应用了基于各种目的而产生的跨地域的事件流数据。如果电信公司不能很好地处理流数据,就不能在某个移动通信基站出现流量高峰前预先将流量分配给其他的基站,也不能在断电时快速做出反应。通过处理流数据来进行异常检测,如检测通话中断或者设备故障,对于电信业来说至关重要。
1.1.4 银行和金融业
因为流处理做得不好而给银行以及金融业带来的潜在问题是极其显著的。从事零售业务的银行不希望客户交易被延迟或者因为错误统计而造成账户余额出错。曾有一个说法叫作“银行家工作时间”,指的就是银行需要在下午早早关门进行结算,这样才能保证第二天营业之前算出准确的账。这种批量作业的营业模式早已消失。如今,交易和报表都必须快速且准确地生成;有些新兴的银行甚至提供实时的推送通知,以及随时随地访问手机银行的服务。在全球化经济中,能够提供24小时服务变得越来越重要。
那么,如果缺少能够灵敏地实时检测出用户行为异常的应用程序,会对金融机构带来什么后果呢?信用卡欺诈检测需要及时的监控和反馈。对异常登录的检测能发现钓鱼式攻击,从而避免巨大的损失。
在许多情况下,人们希望用低延迟或者实时的流处理来获得数据的高时效性,前提是流处理本身是准确且高效的。