离线和实时数据分析
数据架构
这是一个同时支持实时计算和离线计算的数据仓库架构,其中实时数据通过Kafka+Flink处理当天数据,离线数据通过Hive+Spark处理历史数据。数据从原始数据层(ODS)、明细数据层(DWD)到服务数据层(DWS)逐级加工处理,确保了数据的完整性和可用性。所有处理后的数据最终统一存储在Doris中,按当天分区和历史分区进行管理,方便业务方使用。
Doris
Apache Doris 最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源,2018 年 7 月由百度捐赠给 Apache 基金会进行孵化,之后在 Apache 导师的指导下由孵化器项目管理委员会成员进行孵化和运营。
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、湖仓一体等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
数仓三层
数据仓库中这三层的含义和作用:
ODS (Operational Data Store) - 原始数据层是一个"数据中转站"或"数据临时存放区"。具体作用是:
- 完整保存从数据源收集来的原始数据,不做任何修改
- 就像是收到快递时的"收发室",先把所有包裹原封不动地存放在这里
- 数据可能是混乱的、重复的、格式不统一的,这都没关系
举个例子:假设你在收集电商订单数据,ODS层会原样保存用户下单时的所有信息:订单号、用户ID、商品信息、支付信息等。即使数据中有错别字、重复记录,也都先原样保存。
DWD (Data Warehouse Detail) - 明细数据层是一个"数据整理层"或"数据标准化层"。具体作用:
- 对ODS层的原始数据进行清洗、转换、规范化处理
- 相当于一个"分拣中心",把杂乱的包裹分类整理、统一包装
- 去除重复数据、修正错误、统一格式
继续用电商订单举例,DWD层会将订单数据整理成统一格式:
- 统一时间格式(比如都转成yyyy-MM-dd HH:mm:ss)
- 统一金额单位(比如都转成分)
- 补充缺失信息(比如根据用户ID关联用户的年龄、性别等信息)
- 删除重复订单
DWS (Data Warehouse Service) - 服务数据层是一个"数据统计层"或"数据汇总层"。具体作用:
- 基于业务需求,对DWD层的数据进行汇总统计
- 就像是制作各种"统计报表",方便业务人员直接使用
- 面向具体的分析主题,提供可直接使用的统计指标
还是用电商订单数据,DWS层会生成各种统计数据:
- 每个用户的累计消费金额
- 每个商品的日销量、月销量
- 不同年龄段用户的购物偏好
- 各个地区的订单分布情况
数据流转过程的通俗理解:
- ODS层就像是一个"收发室":把所有数据都先收进来
- DWD层就像是一个"整理室":把凌乱的数据整理得规规矩矩
- DWS层就像是一个"报表室":基于整理好的数据,生成各种统计报表
这三层的价值:
- ODS层保证数据完整性:不丢失任何原始信息
- DWD层保证数据质量:统一规范、干净可用
- DWS层提供数据服务:直接服务于业务分析需求
通过这种分层处理:
- 可以追溯:从统计数据可以追溯到原始数据
- 可以复用:整理好的数据可以服务于不同的统计需求
- 职责分明:每层都有清晰的职责定位
- 维护方便:出现问题可以快速定位到具体环节
参考:
- FFA 2022 实时湖仓
- 快手:从 Clickhouse 到 Apache Doris, 实现湖仓分离向湖仓一体架构升级
- 腾讯音乐:从 Elasticsearch 到 Apache Doris 内容库升级,统一搜索分析引擎,成本直降 80%
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))