"《实时/离线数仓实战》是一个以电商系统为基础,围绕电商业务指标统计需求而构建的数仓项目。该项目涵盖了基于Doris、Piamon、Hudi和Iceberg的离线数仓和实时数仓(数据湖)的构建。两种场景在数据处理逻辑上保持一致,但采用了不同的技术实现,为数仓建设提供了多样化的思路。 项目包含两个版本:warehouseV1 和 warehouseV2。V1版本在业务逻辑上较为基础,适合初学者快速理解数仓构建的基本概念;而V2版本则提供了更为全面和复杂的业务逻辑,适合深入学习和实践。在数据生成方面,V1版本使用Python脚本进行模拟,便于快速迭代和测试;V2版本则采用Java代码生成模拟数据,以适应更大规模和更复杂的数据处理需求。"
电商数仓项目(实时/离线)的技术架构由四个关键部分组成:
-
数据源模块:本模块通过 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 工具进行报表和数据大屏的制作与展示,以直观地呈现数据洞察。
软件 | 版本 | 安装包 | 对应依赖包 |
---|---|---|---|
Zookeeper | 3.9.1 | apache-zookeeper-3.9.1-bin.tar.gz | |
Kafka | 3.6.1 | kafka_2.12-3.6.1.tgz | |
Seatunnel | 2.3.3 | apache-seatunnel-2.3.3-bin.tar.gz | seatunnel-hadoop3-3.1.4-uber-2.3.3-optional.jar |
Dolphinscheduler | 3.2.0 | apache-dolphinscheduler-3.2.0-bin.tar.gz | mysql-connector-java-8.0.16.jar |
Doris | 2.0.4 | apache-doris-2.0.4-bin-x64.tar.gz | |
Flink | 1.18.1 | flink-1.18.1-bin-scala_2.12.tgz | flink-sql-connector-mysql-cdc-2.4.2.jar flink-sql-connector-kafka-3.1.0-1.18.jar flink-sql-connector-hive-3.1.3_2.12-1.19.0.jar |
Iceberg | 1.5.2 | iceberg-flink-runtime-1.18-1.5.2.jar | |
Hudi | 0.15.0 | hudi-flink1.18-bundle-0.15.0.jar | |
Paimon | 0.8 | paimon-flink-1.18-0.8-20240301.002155-30.jar | flink-shaded-hadoop-2-uber-2.7.5-9.0.jar |
Dinky | 1.0.0 | dinky-release-1.18-1.0.0-rc4.tar.gz | |
Hadoop | 3.1.3 | hadoop-3.1.3.tar.gz | |
Hive | 3.1.3 | apache-hive-3.1.3-bin.tar.gz | paimon-hive-connector-3.1-0.7.0-incubating.jar iceberg-hive-runtime-1.5.2.jar hudi-hadoop-mr-bundle-0.15.0.jar |
Maven | 3.9.6 | apache-maven-3.9.6-bin.tar.gz | |
Centos | 8 | CentOS-8.5.2111-x86_64-dvd1.iso | |
OpenJDK | 8 | openlogic-openjdk-8u402-b06-linux-x64.tar.gz |
生成业务库数据如下图所示:
生成用户日志数据如下图所示:
涉及组件:Kafka + Flink + Doris + Seatunnel + Dolphinscheduler
Kafka 数据通过 Flink 接入 Doris
MySQL 数据通过 SeaTunnel 接入 Doris
数据采集进 Doris ODS 层,实现效果如下图所示:
开发 DorisSQL 进行 DIM 层数据处理
DIM 层数据实现效果如下图:
开发 DorisSQL 进行 DWD 层数据处理
DWD 层数据实现效果如下图:
开发 DorisSQL 进行 DWS 层数据处理
DWS 层数据实现效果如下图:
开发 DorisSQL 进行 ADS 层数据处理
ADS 层数据实现效果如下图:
最终的任务概览如下图所示
任务编排效果如下图所示
涉及组件:Kafka + Flink(CDC/SQL/UDF) + Paimon/Hudi/Iceberg + Hive + Dinky
Kafka 数据通过 FlinkSQL 接入 Paimon/Hudi/Iceberg ,实际数据落到 Hive
MySQL 数据通过 FlinkCDC 接入 Paimon/Hudi/Iceberg ,实际数据落到 Hive
数据采集进 Paimon ODS 层,实现效果如下图所示:
开发 FlinkSQL 进行 DWD 层数据处理
DWD 层数据实现效果如下图:
开发 FlinkSQL 进行 DIM 层数据处理
DIM 层数据实现效果如下图:
开发 FlinkSQL 进行 DWS 层数据处理
DWS 层数据实现效果如下图:
开发 FlinkSQL 进行 ADS 层数据处理
ADS 层数据实现效果如下图: