《实时/离线数仓实战》代码,是以电商系统为底座,以电商各类指标统计需求为导向,开发基于Doris和Piamon、Hudi、Iceberg的离线数仓和实时数仓(数据湖)。离线和实时场景其数据处理逻辑是一致的,只是实现技术不一样,旨在给各位朋友提供一种数仓建设的不同思路参考。代码中有两个版本, warehouseV1 和 warehouseV2 的区别是V1业务逻辑较为简单,V2业务逻辑比较齐全,V1的模拟数据生产是通过 Python 脚本模拟生成,V2的模拟数据是通过 JAVA 代码来生成。
1 技术架构

数据源模块:采用 JAVA 代码来生成电商业务数据写入 MySQL ,生成用户日志数据写入 Kafka ,两者都可以在配置文件中配置需要生成数据的日期 数据采集模块:使用 Dinky 开发 FlinkSQL 代码来消费 Kafka 用户日志数据并写入 Doris \ Paimon \ Hudi \ Iceberg ODS 层,使用 DolphinScheduler 配置 SeaTunnel 任务同步 MySQL 业务数据到 Doris ODS 层, 使用 FlinkSQL/CDC 方式分别采集 Kafka 和 MySQL 中的数据到 Paimon \ Hudi \ Iceberg ODS 层 数仓(数据湖)模块:数仓模块采用业界通用的 ODS -> DWD/DIM -> DWS -> ADS 四级分层,数据在 Doris \ Paimon \ Hudi \ Iceberg 中分别通过批量调度和实时处理的方式进行流转 数据可视化:ADS 层和 DWS 层的数据可以通过 SuperSet 和 DataRT 来进行报表和大屏制作及展示
├─src│ └─main│ └─java│ └─org│ └─bigdatatechcir│ ├─images│ ├─warehousev1│ │ ├─datageneration│ │ ├─doris│ │ │ ├─dml│ │ │ │ ├─ads│ │ │ │ ├─dwdarehouse-learning│ │ │ │ ├─dws│ │ │ │ └─ods│ │ │ └─logical│ │ │ ├─ads│ │ │ ├─dwd│ │ │ └─dws│ │ ├─flink│ │ │ ├─ads│ │ │ │ └─test│ │ │ ├─dwd│ │ │ │ └─test│ │ │ ├─dws│ │ │ │ └─test│ │ │ ├─ods│ │ │ │ └─test│ │ │ └─sql│ │ │ ├─ads│ │ │ ├─dwd│ │ │ ├─dws│ │ │ └─ods│ │ ├─mysql│ │ └─seatunnel│ └─warehousev2│ ├─datageneration│ │ ├─business│ │ └─userlog│ ├─doris│ │ ├─dml│ │ │ ├─ads│ │ │ ├─dim│ │ │ │ └─data│ │ │ ├─dwd│ │ │ ├─dws│ │ │ └─ods│ │ └─logical│ │ ├─ads│ │ ├─dim│ │ ├─dwd│ │ └─dws│ ├─flink│ │ ├─doris│ │ │ ├─catalog│ │ │ └─ods│ │ ├─hudi│ │ │ ├─ads│ │ │ ├─dim│ │ │ ├─dwd│ │ │ ├─dws│ │ │ └─ods│ │ ├─iceberg│ │ │ ├─ads│ │ │ ├─dim│ │ │ ├─dwd│ │ │ ├─dws│ │ │ └─ods│ │ ├─paimon│ │ │ ├─ads│ │ │ ├─dim│ │ │ ├─dwd│ │ │ ├─dws│ │ │ └─ods│ │ └─udf│ └─seatunnel
这或许是一个对你有用的开源项目,data-warehouse-learning 项目是一套基于 MySQL + Kafka + Hadoop + Hive + Dolphinscheduler + Doris + Seatunnel + Paimon + Hudi + Iceberg + Flink + Dinky + DataRT + SuperSet 实现的实时离线数仓(数据湖)系统,以大家最熟悉的电商业务为切入点,详细讲述并实现了数据产生、同步、数据建模、数仓(数据湖)建设、数据服务、BI报表展示等数据全链路处理流程。
https://gitee.com/wzylzjtn/data-warehouse-learning https://github.com/Mrkuhuo/data-warehouse-learning 项目演示:
4 通用部分
4.1 组件安装

4.2模拟数据生成

生成业务库数据如下图所示:

生成用户日志数据如下图所示:

5 离线数仓建设部分(Doris)
涉及组件:Kafka + Flink + Doris + Seatunnel + Dolphinscheduler
5.1 数据采集
Kafka 数据通过 Flink 接入 Doris

MySQL 数据通过 SeaTunnel 接入 Doris

5.2 Doris ODS 层建设
数据采集进 Doris ODS 层,实现效果如下图所示:

5.3 Doris DIM 层建设
开发 DorisSQL 进行 DIM 层数据处理

DIM 层数据实现效果如下图:

5.4 Doris DWD 层建设
开发 DorisSQL 进行 DWD 层数据处理

DWD 层数据实现效果如下图:

5.5 Doris DWS 层建设
开发 DorisSQL 进行 DWS 层数据处理

DWS 层数据实现效果如下图:

5.6 Doris ADS 层建设
开发 DorisSQL 进行 ADS 层数据处理

ADS 层数据实现效果如下图:

5.7 任务编排
最终的任务概览如下图所示

任务编排效果如下图所示

5.8 BI报表展示

6 实时数仓(数据湖)建设部分(Paimon/Hudi/Iceberg)
涉及组件:Kafka + Flink(CDC/SQL/UDF) + Paimon/Hudi/Iceberg + Hive + Dinky
6.1 Paimon ODS 层建设

数据采集进 Paimon ODS 层,实现效果如下图所示:

6.2 Paimon DWD 层建设
开发 FlinkSQL 进行 DWD 层数据处理

DWD 层数据实现效果如下图

6.3 Paimon DIM 层建设
开发 FlinkSQL 进行 DIM 层数据处理

DIM 层数据实现效果如下图

6.4 Paimon DWS 层建设
开发 FlinkSQL 进行 DWS 层数据处理

DWS 层数据实现效果如下图

6.5 Paimon ADS 层建设
开发 FlinkSQL 进行 ADS 层数据处理

ADS 层数据实现效果如下图

6.6 Doris Catalog 连接 Paimon + DataRT 进行数据展示

项目文档地址

添加作者进大数据交流群

推荐阅读
太牛了!国人主导的元数据管理组件Gravitino横空出世! 实时离线数仓实战No.12 | Doris中搭建离线数仓ADS层 Flink面试全攻略:从基础到进阶的必知必会 面试通关秘籍!Hive高频难题精选 什么是数据湖仓一体? 实时离线数仓实战No.14 | Paimon搭建实时数仓DWD层 →





