本文会简述大数据分析场景须要解决的技术挑战,讨论目前主流大数据架构模式及其发展。最后咱们将介绍如何结合云上存储、计算组件,实现更优的通用大数据架构模式,以及该模式能够涵盖的典型数据处理场景。html
如今已经有愈来愈多的行业和技术领域需求大数据分析系统,例如金融行业须要使用大数据系统结合VaR(value at risk)或者机器学习方案进行信贷风控,零售、餐饮行业须要大数据系统实现辅助销售决策,各类IOT场景须要大数据系统持续聚合和分析时序数据,各大科技公司须要创建大数据分析中台等等。
抽象来看,支撑这些场景需求的分析系统,面临的都是大体相同的技术挑战:算法
Lambda架构数据库
Lambda架构是目前影响最深入的大数据处理架构,它的核心思想是将不可变的数据以追加的方式并行写到批和流处理系统内,随后将相同的计算逻辑分别在流和批系统中实现,而且在查询阶段合并流和批的计算视图并展现给用户。Lambda的提出者Nathan Marz还假定了批处理相对简单不易出现错误,而流处理相对不太可靠,所以流处理器可使用近似算法,快速产生对视图的近似更新,而批处理系统会采用较慢的精确算法,产生相同视图的校订版本。
架构
图 1 Lambda架构示例并发
Lambda架构典型数据流程是(http://lambda-architecture.net/):app
Lambda架构设计推广了在不可变的事件流上生成视图,而且能够在必要时从新处理事件的原则,该原则保证了系统随需求演进时,始终能够建立相应的新视图出来,切实可行的知足了不断变化的历史数据和实时数据分析需求。框架
Lambda架构的四个挑战less
Lambda架构很是复杂,在数据写入、存储、对接计算组件以及展现层都有复杂的子课题须要优化:运维
流批融合的Lambda架构机器学习
针对Lambda架构的问题3,计算逻辑须要分别在流批框架中实现和运行的问题,很多计算引擎已经开始往流批统一的方向去发展,例如Spark和Flink,从而简化lambda架构中的计算部分。实现流批统一一般须要支持:1.以相同的处理引擎来处理实时事件和历史回放事件;2.支持exactly once语义,保证有无端障状况下计算结果彻底相同;3.支持以事件发生时间而不是处理时间进行窗口化;
Kappa架构
Kappa架构由Jay Kreps提出,不一样于Lambda同时计算流计算和批计算并合并视图,Kappa只会经过流计算一条的数据链路计算并产生视图。Kappa一样采用了从新处理事件的原则,对于历史数据分析类的需求,Kappa要求数据的长期存储可以以有序log流的方式从新流入流计算引擎,从新产生历史数据的视图。
图2 Kappa大数据架构
Kappa方案经过精简链路解决了1数据写入和3计算逻辑复杂的问题,但它依然没有解决存储和展现的问题,特别是在存储上,使用相似kafka的消息队列存储长期日志数据,数据没法压缩,存储成本很大,绕过方案是使用支持数据分层存储的消息系统(如Pulsar,支持将历史消息存储到云上存储系统),可是分层存储的历史日志数据仅能用于Kappa backfill做业,数据的利用率依然很低。
Lambda和Kappa的场景区别:
Kappa+
Kappa+是Uber提出流式数据处理架构,它的核心思想是让流计算框架直读HDFS类的数仓数据,一并实现实时计算和历史数据backfill计算,不须要为backfill做业长期保存日志或者把数据拷贝回消息队列。Kappa+将数据任务分为无状态任务和时间窗口任务,无状态任务比较简单,根据吞吐速度合理并发扫描全量数据便可,时间窗口任务的原理是将数仓数据按照时间粒度进行分区存储,窗口任务按时间序一次计算一个partition的数据,partition内乱序并发,全部分区文件所有读取完毕后,全部source才进入下个partition消费并更新watermark。事实上,Uber开发了Apache hudi框架来存储数仓数据,hudi支持更新、删除已有parquet数据,也支持增量消费数据更新部分,从而系统性解决了问题2存储的问题。下图3是完整的Uber大数据处理平台,其中Hadoop -> Spark -> Analytical data user涵盖了Kappa+数据处理架构。
图3 Uber围绕Hadoop dataset的大数据架构
混合分析系统的Kappa架构
Lambda和Kappa架构都还有展现层的困难点,结果视图如何支持ad-hoc查询分析,一个解决方案是在Kappa基础上衍生数据分析流程,以下图4,在基于使用Kafka + Flink构建Kappa流计算数据架构,针对Kappa架构分析能力不足的问题,再利用Kafka对接组合ElasticSearch实时分析引擎,部分弥补其数据分析能力。可是ElasticSearch也只适合对合理数据量级的热数据进行索引,没法覆盖全部批处理相关的分析需求,这种混合架构某种意义上属于Kappa和Lambda间的折中方案。
图4 Kafka + Flink + ElasticSearch的混合分析系统
Lambda plus是基于Tablestore和Blink打造的云上存在能够复用、简化的大数据架构模式,架构方案全serverless即开即用,易搭建免运维。
表格存储(Tablestore)是阿里云自研的NoSQL多模型数据库,提供PB级结构化数据存储、千万TPS以及毫秒级延迟的服务能力,表格存储提供了通道服务(TunnelService)支持用户以按序、流式地方式消费写入表格存储的存量数据和实时数据,同时表格存储还提供了多元索引功能,支持用户对结果视图进行实时查询和分析。
Blink是阿里云在Apache Flink基础上深度改进的实时计算平台,Blink旨在将流处理和批处理统一,实现了全新的 Flink SQL 技术栈,在功能上,Blink支持如今标准 SQL 几乎全部的语法和语义,在性能上,Blink也比社区Flink更增强大。
在TableStore + blink的云上Lambda架构中,用户能够同时使用表格存储做为master dataset和batch&stream view,批处理引擎直读表格存储产生batch view,同时流计算引擎经过Tunnel Service流式处理实时数据,持续生成stream view。
图5 Tablestore + Blink的Lambda plus大数据架构
如上图5,其具体组件分解:
Lambda batch层:
Streaming层:
Serving层:
图6 Lambda plus的数据链路
针对上述Lambda架构1-4的技术问题,Lambda plus的解决思路:
总结,表格存储实现了batch view、master dataset直接查询、stream view的功能全集,Blink实现流批统一,Tablestore加blink的Lambda plus模式能够明显简化Lambda架构的组件数量,下降搭建和运维难度,拓展用户数据价值。
存储引擎的高并发、低延迟特性:
使用通道服务精简架构:
基于Tablestore和Blink的Lambda plus架构,适用于基于分布式NoSQL数据库存储数据的大数据分析场景,如IOT、时序数据、爬虫数据、用户行为日志数据存储等,数据量以TB级为主。典型的业务场景如:
能够参考下列资源快速体验表格存储+blink的大数据架构、表格存储多元索引及其相关场景:
本文做者:Dendi
本文为云栖社区原创内容,未经容许不得转载。