数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务,数据仓库的建设也是“数据智能”中必不可少的一环。本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线数仓的对比六个方面全面分享关于数仓的详细内容。
数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
数据仓库是伴随着企业信息化发展起来的,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术也在不停的发展。
-
-
大数据&数据湖以支持大量&复杂数据类型(文本、图像、视频、音频);
数据仓库有两个环节:数据仓库的构建与数据仓库的应用。
早期数据仓库构建主要指的是把企业的业务数据库如 ERP、CRM、SCM 等数据按照决策分析的要求建模并汇总到数据仓库引擎中,其应用以报表为主,目的是支持管理层和业务人员决策(中长期策略型决策)。
随着业务和环境的发展,这两方面都在发生着剧烈变化。
-
随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业务数据库的基础上出现了非结构化数据,比如网站 log,IoT 设备数据,APP 埋点数据等,这些数据量比以往结构化的数据大了几个量级,对 ETL 过程、存储都提出了更高的要求;
-
互联网的在线特性也将业务需求推向了实时化,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型);同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器自动决策。比如欺诈检测和用户审核。
总结来看,对数据仓库的需求可以抽象成两方面:实时产生结果、处理和保存大量异构数据。
3.1 面向主题
从公司业务出发,是分析的宏观领域,比如供应商主题、商品主题、客户主题和仓库主题
3.2 为多维数据分析服务
数据报表;数据立方体,上卷、下钻、切片、旋转等分析功能。
3.3 反范式数据模型
数据仓库概念是 Inmon 于 1990 年提出并给出了完整的建设方法。随着互联网时代来临,数据量暴增,开始使用大数据工具来替代经典数仓中的传统工具。此时仅仅是工具的取代,架构上并没有根本的区别,可以把这个架构叫做离线大数据架构。
后来随着业务实时性要求的不断提高,人们开始在离线大数据架构基础上加了一个加速层,使用流处理技术直接完成那些实时性要求较高的指标计算,这便是 Lambda 架构。
再后来,实时的业务越来越多,事件化的数据源也越来越多,实时处理从次要部分变成了主要部分,架构也做了相应调整,出现了以实时事件处理为核心的 Kappa 架构。
4.1 离线大数据架构
数据源通过离线的方式导入到离线数仓中。
下游应用根据业务需求选择直接读取 DM 或加一层数据服务,比如 MySQL 或 Redis。数据仓库从模型层面分为三层:
-
-
DWD,数据仓库明细层,根据主题定义好事实与维度表,保存最细粒度的事实数据;
-
DM,数据集市/轻度汇总层,在 DWD 层的基础之上根据不同的业务需求做轻度汇总;
典型的数仓存储是 HDFS/Hive,ETL 可以是 MapReduce 脚本或 HiveSQL。
4.2 Lambda 架构
随着大数据应用的发展,人们逐渐对系统的实时性提出了要求,为了计算一些实时指标,就在原来离线数仓的基础上增加了一个实时计算的链路,并对数据源做流式改造(即把数据发送到消息队列),实时计算去订阅消息队列,直接完成指标增量的计算,推送到下游的数据服务中去,由数据服务层完成离线&实时结果的合并。
注:
流处理计算的指标批处理依然计算,最终以批处理为准,即每次批处理计算后会覆盖流处理的结果。(这仅仅是流处理引擎不完善做的折中)
-
同样的需求需要开发两套一样的代码:
这是 Lambda 架构最大的问题,两套代码不仅仅意味着开发困难(同样的需求,一个在批处理引擎上实现,一个在流处理引擎上实现,还要分别构造数据测试保证两者结果一致),后期维护更加困难,比如需求变更后需要分别更改两套代码,独立测试结果,且两个作业需要同步上线。
-
资源占用增多
:同样的逻辑计算两次,整体资源占用会增多(多出实时计算这部分
4.3 Kappa 架构
Lambda 架构虽然满足了实时的需求,但带来了更多的开发与运维工作,其架构背景是流处理引擎还不完善,流处理的结果只作为临时的、近似的值提供参考。后来随着 Flink 等流处理引擎的出现,流处理技术很成熟了,这时为了解决两套代码的问题,LickedIn 的 Jay Kreps 提出了 Kappa 架构。
Kappa 架构可以认为是 Lambda 架构的简化版(只要移除 lambda 架构中的批处理部分即可)。
在 Kappa 架构中,需求修改或历史数据重新处理都通过上游重放完成。
Kappa 架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。
重新处理是人们对 Kappa 架构最担心的点,但实际上并不复杂:
-
选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列,根据需求设置历史数据保存的时长,比如 Kafka,可以保存全部历史数据。
-
当某个或某些指标有重新处理的需求时,按照新逻辑写一个新作业,然后从上游消息队列的最开始重新消费,把结果写到一个新的下游表中。
-
当新作业赶上进度后,应用切换数据源,读取 2 中产生的新结果表。
-
4.4 Lambda 架构与 Kappa 架构的对比
在真实的场景中,很多时候并不是完全规范的 Lambda 架构或 Kappa 架构,可以是两者的混合,比如大部分实时指标使用 Kappa 架构完成计算,少量关键指标(比如金额相关)使用 Lambda 架构用批处理重新计算,增加一次校对过程。
Kappa 架构并不是中间结果完全不落地,现在很多大数据系统都需要支持机器学习(离线训练),所以实时中间结果需要落地对应的存储引擎供机器学习使用,另外有时候还需要对明细数据查询,这种场景也需要把实时明细层写出到对应的引擎中。参考后面的案例。
另外,随着数据多样性的发展,数据仓库这种提前规定 schema 的模式显得越来难以支持灵活的探索&分析需求,这时候便出现了一种数据湖技术,即把原始数据全部缓存到某个大数据存储上,后续分析时再根据需求去解析原始数据。简单的说,数据仓库模式是 schema on write,数据湖模式是 schema on read。
菜鸟仓配实时数据仓库本案例参考自菜鸟仓配团队的分享,涉及全局设计、数据模型、数据保障等几个方面。
5.1 整体设计
整体设计如下图,基于业务系统的数据,数据模型采用中间层的设计理念,建设仓配实时数仓;计算引擎,选择更易用、性能表现更佳的实时计算作为主要的计算引擎;数据服务,选择天工数据服务中间件,避免直连数据库,且基于天工可以做到主备链路灵活配置秒级切换;数据应用,围绕大促全链路,从活动计划、活动备货、活动直播、活动售后、活动复盘五个维度,建设仓配大促数据体系。
5.2 数据模型
不管是从计算成本,还是从易用性,还是从复用性,还是从一致性等等,我们都必须避免烟囱式的开发模式,而是以中间层的方式建设仓配实时数仓。与离线中间层基本一致,我们将实时中间层分为两层。
实时计算订阅业务数据消息队列,然后通过数据清洗、多数据源 join、流式数据与离线维度信息等的组合,将一些相同粒度的业务系统、维表中的维度属性全部关联到一起,增加数据易用性和复用性,得到最终的实时明细数据。这部分数据有两个分支,一部分直接落地到 ADS,供实时明细查询使用,一部分再发送到消息队列中,供下层计算使用;
以数据域+业务域的理念建设公共汇总层,与离线数仓不同的是,这里汇总层分为轻度汇总层和高度汇总层,并同时产出,轻度汇总层写入 ADS,用于前端产品复杂的 olap 查询场景,满足自助分析和产出报表的需求;高度汇总层写入 Hbase,用于前端比较简单的 kv 查询场景,提升查询性能,比如实时大屏等;
注:
-
ADS 是一款提供 OLAP 分析服务的引擎。开源提供类似功能的有,Elastic Search、Kylin、Druid 等;
-
案例中选择把数据写入到 Hbase 供 KV 查询,也可根据情况选择其他引擎,比如数据量不多,查询压力也不大的话,可以用 MySQL;
-
5.3 数据保障
阿里巴巴每年都有双十一等大促,大促期间流量与数据量都会暴增。
实时系统要保证实时性,相对离线系统对数据量要更敏感,对稳定性要求更高。所以为了应对这种场景,还需要在这种场景下做两种准备:
菜鸟双11「仓储配送数据实时化」详情了解:
https://yq.aliyun.com/articles/658787?spm=a2c4e.11153940.0.0.449f1d531ZoDbX
在看过前面的叙述与菜鸟案例之后,我们看一下实时数仓与离线数仓在几方面的对比:
-
首先,从架构上,实时数仓与离线数仓有比较明显的区别,实时数仓以 Kappa 架构为主,而离线数仓以传统大数据架构为主。Lambda 架构可以认为是两者的中间态。
-
其次,从建设方法上,实时数仓和离线数仓基本还是沿用传统的数仓主题建模理论,产出事实宽表。另外实时数仓中实时流数据的 join 有隐藏时间语义,在建设中需注意。
-
最后,从数据保障看,实时数仓因为要保证实时性,所以对数据量的变化较为敏感。在大促等场景下需要提前做好压测和主备保障工作,这是与离线数据的一个较为明显的区别。
数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战。在智能商业中,数据的结果代表了用户反馈、获取数据的及时性尤为重要。快速获取数据反馈能够帮助公司更快地做出决策,更好地进行产品迭代,实时数仓在这一过程中起到了不可替代的作用。
如何更好的建设实时数仓、有哪些优秀的生产实践经验可借鉴?
11月28-30日,Flink Forward Asia 邀请来自 Netflix、美团点评、小米、OPPO、菜鸟等数仓专家,聚焦 Flink 实时数仓在数据链路中扮演的角色与在智能商业中的重要价值,分享实时数仓的应用实践及平台智能化的探索与思考。
美团点评基于 Apache Flink 的实时数仓平台实践
美团点评的业务众多,涉及几十条业务线;数据量大,处理峰值达到 1.5 亿条每秒,每天数据增长量超过 3 万亿条;大多数业务都是交易场景,链路长、状态多样,业务在数仓建设中面临着很大挑战。随着业务对时效性的要求越来越高,如即时配送、实时营销,越来越多的业务对实时数仓提出了需求和探索。实时计算团队调研汇总了多个业务线在实时数仓方面的建设经验,建设了一站式的实时数仓开发平台,以更好得支持业务发展。
本次分享将主要介绍实时计算的业务应用和规模、多个业务在实时数仓方面的建设情况,以及基于 Flink 的实时计算平台和实时数仓平台。
小米集群业务线众多,从信息流,电商 ,广告到金融等覆盖了众多了领域,小米流式平台为小米集团各业务提供一体化的流式数据解决方案,主要包括数据采集,数据集成和流式计算三个模块。目前每天数据量达到 2 万亿条,实时同步任务 1.5 万,实时计算的数据 1 万亿条。伴随着小米业务的发展,流式平台也经历三次大升级改造,满足了众多业务的各种需求。
最新的一次迭代基于 Apache Flink,对于流式平台内部模块进行了彻底的重构,同时小米各业务也在由 Spark Streaming 逐步切换到 Flink。本次分享主要包括小米流式平台架构演进、基于 Flink 的新版本流式平台架构设计与产品化,小米典型业务应用实践,未来挑战与规划等。
Netflix:Evolving Keystone to an Open Collaborative Real-time ETL Platform
Senior Software Engineer at Netflix
Netflix 致力于我们会员的喜悦。我们不懈地专注于提高产品体验和高质量内容。近年来,我们一直在技术驱动的 Studio 和内容制作方面进行大量投资。在这个过程中,我们发现在实时数据平台的领域里中出现了许多独特并有意思的挑战。例如,在微服务架构中,Domain object 分布在不同的 App 及其有状态存储中,这使得低延迟高一致性的实时报告和 entity 搜索发现特别具有挑战性。
在本次演讲中,我们将讨论一些有趣的案例,分享分布式系统基础方面的各种挑战以及解决方案。我们还将讨论在开发运维过程中的收获,对开放式自助式实时数据平台的一些新愿景,以及我们对 Realtime ETL 基础平台的一些新思考。
贾元乔老师就职于菜鸟网络供应链数据团队,致力于菜鸟供应链数仓建设、数据产品开发以及数据技术创新。
本次分享主要从数据模型、数据计算、数据服务等几个方面介绍菜鸟供应链数据团队在实时数据技术架构上的演进,以及在供应链场景中,典型的实时应用场景及Flink实现方案。
OPPO 基于 Apache Flink 的实时数仓实践
Apache Flink Contributor,OPPO大数据平台研发负责人
张俊老师主导了 OPPO 涵盖“数据接入-数据治理-数据开发-数据应用”全链路的数据中台建设。曾先后工作于摩根士丹利、腾讯,具有丰富的数据系统研发经验,目前重点关注数仓建设、实时计算、OLAP引擎方向,同时也是Flink开源社区贡献者。本次演讲主要分享 OPPO 基于 Flink 构建实时数仓的:
点击下方链接可了解更多培训课程与 Flink Forward Asia 2019 大会议程~
https://developer.aliyun.com/special/ffa2019-conference?spm=a2c6h.13239638.0.0.21f27955CZ1xEE
你也「在看」吗?