实时离线数仓架构
2024-09-01 14:48:20 7 举报
实时离线数仓架构。Apache Flink 与 Apache Doris 构建极速易用的实时数仓架构。
作者其他创作
大纲/内容
DWD
传统实时/离线数仓
ODS
DIM
DWS
基于以上痛点,一个“统一的实时”架构呼之欲出(基于 Apache Doris 和 Apache Flink 构建实时数仓)。“统一”是指数据结构的统一,半结构化和结构化数据能够统一存储在一起。同时也指的是在一个平台中能完成多种分析和计算场合(实时查询,交互式分析,批量处理等)“实时”指的是数据的接入和数据分析都能实时的进行。 数据源经过各种数据集成和加工后,入库到实时数仓 Doris 之中。然后,基于 Doris 构建一个统一的数仓,对外提供服务。因为 Doris 既可以承载数据仓库的服务,也可以承载 OLAP 等多种应用场景。 我们只需要通过 Flink CDC 将 RDS 的数据,实时同步到 Doris 或 Kafka。通过 Routine Load 将 Kafka 等消息系统中的数据,实时同步到 Doris。在 Doris 内部,基于 Doris 不同的表模型、Rollup、以及物化视图的能力,构建实时数仓。 Doris 的表模型分为明细模型、主键模型和聚合模型。在 Doris 内部构建实时数仓时,ODS 层通常会使用明细模型构建。DWD 层通过 SQL 调度任务,对 ODS 数据抽取并获取。DWS 和 ADS 层则可以通过 Rollup 和物化视图的技术手段构建。 除此之外,Doris 还支持基于 Iceberg、Delta Lake、Hudi 和 Paimon 的数据湖服务,提供一些联邦分析和湖仓加速的能力。这样我们便完成了基于 Doris 构建一个实时数仓。在实时数仓之上,我们可以构建 BI 服务、Adhoc 查询、多维分析等应用。
离线数仓
ADS
实时数仓
业务落库
实时大屏
数据大屏
数据报表
即席查询
查询平台
FlinkETL
CDC
行为数据
业务数据
触发埋点
数据应用
SparkETL
在实时数据部分,通过 Binlog 的方式,将业务数据库中的数据变更,采集到实时数仓。同时,通过 Flume-Kafka-Sink 或 Filebeat-Kafka-FlinkJob 对行为数据进行实时采集。当数据源上不同来源的数据都采集到实时数仓后,便可以构建实时数仓。在实时数仓构建的内部,遵守数仓分层理论,将数据分为 ODS 层、DWD 层、DWS 层、ADS 层。 在离线数据流部分,通过 DataX 定时同步的方式,采集业务库 RDS 中的一些数据。当不同来源的数据,进入到离线数仓后,便可以在离线数仓内部,依赖 Spark SQL 或 Hive SQL,对数据进行定时处理。 然后,分离出不同维度(ODS、DWD、ADS 等)的数据,并将这些数据存在一个存储介质上。一般会存在 HDFS 或 S3 的对象存储上。通过这样的方式,我们的离线数仓便构建起来了。与此同时,为了保障数据的一致性。我们需要一个数据清洗任务。使用离线数据对实时数据进行清洗,保障数据最终的一致性。 除此之外,业务还有半结构化的需求。我们会使用 ES 对日志进行检索和分析;使用 HBase 构建高效的点查服务。在部分情况下,业务需要对外提供统一的数据服务。这时,部分业务会使用 Presto/Trino 或 Doris 的查询网关,统一对用户提供服务。对于 OLAP 的高并发,使用 Druid/Kylin 或 Doris 组件。 这个架构有什么问题呢?首先,架构组件多,维护复杂。其次,它的计算、存储和研发成本都比较高。主要因为需要同时维护两套数据和两套计算,即实时数据流和离线计算任务。最后,我们无法保障实时流的数据和离线数据的一致性。此时,只能通过离线数据定时清洗,保证数据的一致性。
Doris 实时/离线数仓
多端访问
Routine Load
注意:这两条数据流并非同时存在,而是二选一。Kafka-Flink-Kafka... 这种方式的优点是时效性高,缺点是数据链路太长,开发复杂Kafka-Flink-Doris... 这种方式的优点是数据链路短,开发简单,缺点是时效性相对低
实时/离线数仓
离线数仓
离线数仓
0 条评论
下一页
为你推荐
查看更多