跳转至

离线和实时数据分析

数据架构

这是一个同时支持实时计算和离线计算的数据仓库架构,其中实时数据通过Kafka+Flink处理当天数据,离线数据通过Hive+Spark处理历史数据。数据从原始数据层(ODS)、明细数据层(DWD)到服务数据层(DWS)逐级加工处理,确保了数据的完整性和可用性。所有处理后的数据最终统一存储在Doris中,按当天分区和历史分区进行管理,方便业务方使用。

数据源实时数仓Kafka(ODS)Kafka(DWD)Kafka(DWS)离线数仓 - by 361way.comHive(ODS)Hive(DWD)Hive(DWS)DorisFlinkFlinkSparkSpark当天分区历史分区

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层会生成各种统计数据:

  • 每个用户的累计消费金额
  • 每个商品的日销量、月销量
  • 不同年龄段用户的购物偏好
  • 各个地区的订单分布情况

数据流转过程的通俗理解:

  1. ODS层就像是一个"收发室":把所有数据都先收进来
  2. DWD层就像是一个"整理室":把凌乱的数据整理得规规矩矩
  3. DWS层就像是一个"报表室":基于整理好的数据,生成各种统计报表

这三层的价值:

  • ODS层保证数据完整性:不丢失任何原始信息
  • DWD层保证数据质量:统一规范、干净可用
  • DWS层提供数据服务:直接服务于业务分析需求

通过这种分层处理:

  1. 可以追溯:从统计数据可以追溯到原始数据
  2. 可以复用:整理好的数据可以服务于不同的统计需求
  3. 职责分明:每层都有清晰的职责定位
  4. 维护方便:出现问题可以快速定位到具体环节

参考:

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))