批处理衰落,流处理兴起,大数据处理平台从Lambda到Kappa的演进

流处理引擎经历了从Storm到Spark Streaming再到Flink的三代的技术迭代,大数据处理也随之经历了从Lambda架构到Kappa架构的演进。本节以电商平台的数据分析为例,来解释大数据处理平台如何支持企业在线服务。电商平台会将用户在APP或网页的搜索、点击和购买行为以日志的形式记录下来,用户的各类行为形成了一个实时数据流,我们称之为用户行为日志。
Chris Riedon on Unsplash

Lambda架构

当以Storm为代表的第一代流处理引擎成熟后,一些互联网公司为了兼顾数据的实时性和准确性,采用下图所示的Lambda架构来处理数据并提供在线服务。Lambda架构主要分为三部分:批处理层、流处理层和在线服务层。其中数据流来自Kafka这样的消息队列。
Lambda架构

批处理层

在批处理层,数据流首先会被持久化保存到批处理数据仓库中,积累一段时间后,再使用批处理引擎来进行计算。这个积累时间可以是一小时、一天也可以是一个月。处理结果最后导入进一个可供应用系统在线查询的数据库上。批处理层中的批处理数据仓库可以是HDFS、Amazon S3或其他数据仓库,批处理引擎可以是MapReduce或Spark。

假如电商平台的数据分析部门想查看全网某天哪些商品购买次数最多,使用批处理引擎对该天数据进行计算,像淘宝、京东这种级别的电商,用户行为日志数据量非常大,在这份日志上进行一个非常简单的计算都可能需要几个小时。批处理引擎一般会定时启动,对前一天或前几个小时的数据进行处理,将结果输出到一个数据库中。与用户行为日志动辄几个小时的处理时间相比,直接查询一个在线数据库只需要几毫秒。这里计算购买次数最多商品的例子相对比较简单,在实际的业务场景中,一般需要做更为复杂的统计分析和机器学习计算,比如构建用户画像时,根据用户年龄和性别等基础信息,分析某类用户最有可能购买的哪类商品,这类计算耗时更长。

批处理层能保证某份数据的结果准确性,而且即使程序失败,直接重启即可。此外,批处理引擎一般扩展性好,即使数据量增多,也可以通过增加节点数量来横向扩展。

流处理层

很明显,假如整个系统只有一个批处理层,会导致用户必须等待很久才能获取计算结果,一般有几个小时的延迟。电商数据分析部门只能查看前一天的统计分析结果,无法获取当前的结果,这对于实时决策来说有一个巨大的时间鸿沟,很可能导致管理者错过最佳决策时机。因此,在批处理层的基础上,Lambda架构增加了一个流处理层,用户行为日志会同时流入流处理层,流处理引擎生成预处理结果,并导入到一个数据库中。分析人员可以查看到前一小时或前几分钟内的数据结果,这大大增加了整个系统的实时性。但数据流会有事件乱序等问题,使用早期的流处理引擎,只能得到一个近似准确的计算结果,相当于牺牲了一定的准确性来换取实时性。

之前的文章曾提到,早期的流处理引擎有一些缺点,在准确性、扩展性和容错性上,流处理层无法直接取代批处理层,只能给用户提供一个近似结果,还不能为用户提供一个一致准确的结果。因此Lambda架构中,出现了批处理和流处理并存的现象。

在线服务层

在线服务层直接面向用户的特定请求,需要将来自批处理层准确但有延迟的预处理结果和流处理层实时但不够准确的预处理结果做融合。在融合过程中,需要不断将批处理层的数据覆盖流处理层生成的较老的数据。很多数据分析工具在数据融合上下了不少功夫,如Apache Druid。也可以用延迟极低的数据库存储来自批处理层和流处理层的预处理结果,在应用程序中人为控制预处理结果的融合。存储预处理结果的数据库可能是关系型数据库MySQL,也可能是键值(Key-Value)数据库Redis或HBase。

Lambda架构的优缺点

Lambda架构在实时性和准确性之间做了一个平衡,能够解决很多大数据处理的问题,曾大量部署在各大互联网公司。它的好处有:

  • 批处理的准确度较高,而且在数据探索阶段可以对某份数据试用不同的方法,可以反复对数据进行实验。另外,批处理的容错性和扩展性较强。

  • 流处理的实时性较高,可以提供一个近似准确的结果。

Lambda架构的缺点也比较明显:

  • 使用两套大数据处理引擎,如果两套大数据处理引擎的API不同,有任何逻辑上的改动,需要在两边同步更新,维护成本高,后期的迭代时间周期长。

  • 早期流处理层的结果只是近似准确。

Kappa架构

Kafka的创始人Jay Kreps认为在很多场景下,维护一套Lambda架构的大数据处理平台耗时耗力,于是提出在某些场景下,没有必要维护一个批处理层,直接使用一个流处理层即可满足需求,即下图所示的Kappa架构。

Kappa架构
Kappa架构的兴起主要有两个原因:

  • Kafka不仅起到消息队列的作用,也可以保存更长时间的历史数据,以替代Lambda架构中批处理层数据仓库部分。流处理引擎以一个更早的时间作为起点开始消费,起到了批处理的作用。

  • Flink流处理引擎解决了事件乱序下计算结果的准确性问题。

Kappa架构相对更简单,实时性更好,所需的计算资源远小于Lambda架构,随着实时处理的需求在不断增长,更多的企业开始使用Kappa架构。

Kappa架构的流行并不意味着不再需要批处理,批处理在一些特定场景上仍然有自己的优势。比如进行一些数据探索、机器学习实验,需要使用批处理来反复验证不同的算法。Kappa架构适用于一些逻辑固定的数据预处理流程,如统计一个时间段内商品的曝光和购买次数、某些关键词的搜索次数等。Flink以流处理见长,但也实现了批处理的,是一个集流批于一体的大数据处理引擎,为架构提供更可靠的数据处理性能,未来Kappa架构将在更多场景下逐渐替换Lambda架构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值