# Flink 电商实时数仓工程解读 > 一套 Maven 多模块的电商实时数仓教学工程,覆盖从埋点日志与业务库经 Kafka 到 Flink 分层加工(DIM/DWD/DWS)、落 ClickHouse 再由可视化工程查询的完整链路。值得研究的是它把数仓分层方法论落成了可运行的 Flink 代码,并在维表、去重、窗口聚合上给出了典型取舍。 This is a Grok-Wiki source-grounded repository wiki. Use the complete Markdown link when an agent needs the full repo context. ## Context Links - [Complete Markdown wiki](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69/llms-full.txt) - [Complete Markdown alias](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69.md) - [Human interactive wiki](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69) - [GitHub repository](https://github.com/aggaadfr/gmall-flink-3.0) ## Repository - Repository: aggaadfr/gmall-flink-3.0 - Generated: 2026-09-08T05:31:55.835Z - Updated: 2026-09-14T05:45:01.256Z - Runtime: Claude Code · claude-fable-5 - Format: Custom - Pages: 4 ## Pages - [导读:一套电商实时数仓的教学全景](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69/pages/01-page-1.md): 从整体定位仓库:三个 Maven 工程各司其职,实时模块按数仓分层组织代码,两个发布工程负责把结果查询出来做可视化。作为开篇,先建立模块边界与技术栈印象,再给出从架构、数据流、计算存储、系统优化到业务实现的阅读路线,避免与后续各页重复。 - [数仓分层与数据流转](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69/pages/02-page-2.md): 讲解一条数据从哪来、往哪去:业务库与埋点日志先进 Kafka 主题,再按 DIM 维表层、DWD 明细层、DWS 汇总层的顺序被加工。以 DimApp、BaseLogApp 和交易预处理的代码为例,说明主题命名约定、脏数据侧输出流、维表配置的广播式加载,以及层与层之间如何靠主题衔接。 - [计算模型与存储选型](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69/pages/03-page-3.md): 围绕“算在哪、存哪里”讲清技术底座:DataStream 与 FlinkSQL 两种写法各自的使用场景,状态与 Checkpoint 在生产上的注意点,以及 Kafka、MySQL、Phoenix/HBase、ClickHouse、Redis 在链路中的分工。重点解释针对维度关联的 Redis 旁路缓存与异步查询、维表配置的广播状态等系统优化手段。 - [业务域落地:指标口径与可复用经验](https://grok-wiki.com/public/wiki/aggaadfr-gmall-flink-3-0-446e0d5adb69/pages/04-page-4.md): 把前几页的通用机制放回业务场景,以流量、交易、用户三个域为线索还原典型指标在代码中的落地方式:新老用户判定与 UV、跳出行为、页面浏览窗口、交易预处理后的支付与下单汇总、注册回流统计。收尾给出从这套工程抽象出的实时数仓分层方法论与踩坑经验,作为全文总结。 ## Source Files - `gmall-publisher-2022/pom.xml` - `gmall-realtime/pom.xml` - `gmall-realtime/src/main/java/com/atguigu/app/dim/DimApp.java` - `gmall-realtime/src/main/java/com/atguigu/app/dwd/db/DwdTradeOrderPreProcess.java` - `gmall-realtime/src/main/java/com/atguigu/app/dwd/db/DwdTradePayDetailSuc.java` - `gmall-realtime/src/main/java/com/atguigu/app/dwd/log/BaseLogApp.java` - `gmall-realtime/src/main/java/com/atguigu/app/dwd/log/DwdTrafficUserJumpDetail.java` - `gmall-realtime/src/main/java/com/atguigu/app/dws/DwsTradeOrderWindow.java` - `gmall-realtime/src/main/java/com/atguigu/app/dws/DwsTrafficPageViewWindow.java` - `gmall-realtime/src/main/java/com/atguigu/app/dws/DwsTrafficVcChArIsNewPageViewWindow.java` - `gmall-realtime/src/main/java/com/atguigu/app/dws/DwsUserUserLoginWindow.java` - `gmall-realtime/src/main/java/com/atguigu/app/dws/DwsUserUserRegisterWindow.java` - `gmall-realtime/src/main/java/com/atguigu/common/GmallConfig.java` - `gmall-realtime/src/main/java/com/atguigu/utils/ClickHouseUtil.java` - `gmall-realtime/src/main/java/com/atguigu/utils/DimUtil.java` - `gmall-realtime/src/main/java/com/atguigu/utils/JedisUtil.java` - `gmall-realtime/src/main/java/com/atguigu/utils/MyKafkaUtil.java` - `gmall-realtime/src/main/java/com/atguigu/utils/MysqlUtil.java` - `gmall-realtime/src/main/java/com/atguigu/utils/PhoenixUtil.java` - `pom.xml` - `README.md`