The user wants me to rewrite the HTML snippet to be between 500 and 800 Chinese characters. Let me count the current draft and adjust it.

Let me write a fresh draft, focusing on the required elements:
1. What problem does this course solve
2. What prerequisite knowledge is needed
3. Which chapters to focus on
4. What can you independently do after learning
5. How to use materials with practice

I need to avoid:
- Repeating file names
- Template phrases
- Self-referencing AI
- Other site names
- Exceeding 800 Chinese characters

Let me write a concise draft:

这门课解决的是从离线数仓向实时数仓演进中的工程落地问题。核心链路是:通过 Kafka/binlog 采集 ODS 层数据,再用 Flink CDC 将数据同步写入 HBase 作为维度存储。很多学习者卡在“流式计算”与“关系型/NoSQL”的范式冲突上,这门课用一套完整的工程实践帮你把这条链路跑通。

适合具备 Java 基础、熟悉 Maven 与 Git 操作,且对 Kafka、HBase 有初步认知的开发者。建议精看的不是目录里的文件名,而是三块:数仓基础概念与架构对比(002-004)、ODS 层数据采集(015-018,重点看 Maxwell 与 binlog 配置)、DIM 层 Flink CDC 同步(021-040,这是整个课程的核心难点,涉及广播流关联、实体类封装、HBase 建表与数据过滤)。

学完能独立搭建一套从日志/binlog 采集到 Flink 同步写入 HBase 的实时数仓环境,并独立处理配置表驱动的维度同步、Kafka 主从数据关联、字段过滤等常见工程问题。

资料包建议按“先搭环境、再跑采集、最后做同步”的顺序拆开用。先通 GitLab 环境搭建与代码推送流程,再跟着 Maxwell 和 FlinkCDC 的测试步骤跑通数据流,最后对照 DIM 层的思路分析和代码,边读代码边改自己环境的检查点与实体类。

Let me count the Chinese characters:

这门课解决的是从离线数仓向实时数仓演进中的工程落地问题。核心链路是:通过 Kafka/binlog 采集 ODS 层数据,再用 Flink CDC 将数据同步写入 HBase 作为维度存储。很多学习者卡在"流式计算"与"关系型/NoSQL"的范式冲突上,这门课用一套完整的工程实践帮你把这条链路跑通。

适合具备 Java 基础、熟悉 Maven 与 Git 操作,且对 Kafka、HBase 有初步认知的开发者。建议精看的不是目录里的文件名,而是三块:数仓基础概念与架构对比(002-004)、ODS 层数据采集(015-018,重点看 Maxwell 与 binlog 配置)、DIM 层 Flink CDC 同步(021-040,这是整个课程的核心难点,涉及广播流关联、实体类封装、HBase 建表与数据过滤)。

学完能独立搭建一套从日志/binlog 采集到 Flink 同步写入 HBase 的实时数仓环境,并独立处理配置表驱动的维度同步、Kafka 主从数据关联、字段过滤等常见工程问题。

资料包建议按"先搭环境、再跑采集、最后做同步"的顺序拆开用。先通 GitLab 环境搭建与代码推送流程,再跟着 Maxwell 和 FlinkCDC 的测试步骤跑通数据流,最后对照 DIM 层的思路分析和代码,边读代码边改自己环境的检查点与实体类。

Let me count:
第(1)门(2)课(3)解(4)决(5)的(6)是(7)从(8)离(9)线(10)数(11)仓(12)向(13)实(14)时(15)数(16)仓(17)演(18)进(19)中(20)的(21)工(22)程(23)落(24)地(25)问(26)题(27)。核(28)心(29)链(30)路(31)是(32):通(33)过(34)Kafka(35)/binlog(36)采(37)集(38)ODS(39)层(40)数(41)据(42),再(43)用(44)Flink(45)CDC(46)将(47)数(48)据(49)同(50)步(51)写(52)入(53)HBase(54)作(55)为(56)维(57)度(58)存(59)储(60)。很(61)多(62)学(63)习(64)者(65)卡(66)在(67)"流(68)式(69)计(70)算(71)"与(72)"关(73)系(74)型(75)/NoSQL(76)"的(77)范(78)

课程目录

001.教程简介
002.基础_数仓基本概念
003.基础_离线数仓架
004.基础_实时数仓架构
005.基础_ER模型和维度建模
006.基础_事实表和维度表
007.基础_数仓构建流程
008.基础_项目架构以及代码版本控制方式介绍
009.基础_IDEA开发环境搭建
010.环境准备_GitLab的安装
011.环境准备_GitLab的其它配置
012.环境准备_创建用户以及群组
013.环境准备_将初始代码推送到GitLab仓库
014.环境准备_设置Kafka分区数
015.ODS_日志数据采集
016.ODS_配置binlog记录业务数据变化
017.ODS_Maxwell的安装与配置
018.ODS_Maxwell同步数据测试
019.DIM_思路分析_基本流程
020.DIM_思路分析_引入配置表
021.DIM_思路分析_引入FlinkCDC
022.DIM_思路分析_配置表字段完善
023.DIM_FlinkCDC的使用
024.DIM_配置表的创建以及切换开发分支
025.DIM_开发思路分析
026.DIM_基本环境准备以及检查点设置
027.DIM_从Kafka主题中读取数据
028.DIM_转换流中数据类型以及Maxwell问题说明
029.DIM_使用FlinkCDC读取配置表数据
030.DIM_将配置流数据类型封装为实体类对象
031.DIM_封装HBaseUtil工具类
032.DIM_在HBase中建表
033.DIM_广播配置流并和主流进行关联
034.DIM_处理广播流数据
035.DIM_处理主流数据
036.DIM_过滤掉不需要传递的字段
037.DIM_主流数据先到问题分析
038.DIM_在open方法中预加载配置信息
039.DIM_将维度数据同步到HBase表中
040.DIM_封装FlinkSourceUtil工具类
041.DIM_抽取单独的处理函数类
042.DIM_抽取BaseApp基类
043.DIM_抽取方法
044.DIM_封装JdbcUtil工具类
045.DIM_DIM层总结
046.DWD_DWD层介绍
047.DWD_日志分流思路分析
048.DWD_开发思路分析
049.DWD_将脏数据放到侧输出流
050.DWD_创建KafkaSink对象以及Kafka一致性保证
051.DWD_抽取FlinkSinkUtil以及脏数据写到Kafka
052.DWD_新老访客标记修复思路
053.DWD_新老访客标记修复代码实现
054.DWD_埋点日志结构分析
055.DWD_分流代码实现
056.DWD_将不同流的数据写到Kafka主题
057.DWD_抽取方法以及提交代码到GitLab
058.DWD_评论事实表思路分析
059.DWD_FlinkAPI双流Join介绍
060.DWD_内连接
061.DWD_左外连接
062.DWD_右外连接以及全外连接
063.DWD_左外连接结果写到Kafka主题
064.DWD_从Kafka主题中读取数据
065.DWD_从HBase表中读取数据
066.DWD_lookupJoin关联
067.DWD_将关联结果写到Kafka主题
068.DWD_评论事实表开发思路以及环境准备
069.DWD_从topic_db主题中读取数据
070.DWD_过滤出评论数据
071.DWD_从Hbase中读取字典表数据
072.DWD_关联评论表和字典表
073.DWD_将关联的结果写到Kafka主题
074.DWD_抽取工具类封装获取连接器属性的方法
075.DWD_抽取BaseSQLApp基类以及通用的建表方法
076.DWD_加购事实表开发思路分析
077.DWD_过滤出insert类型的加购数据
078.DWD_过滤出update类型的加购数据以及写到Kafka
079.DWD_下单事实表思路分析
080.DWD_下单事实表代码实现
081.DWD_取消订单事实表整体实现
082.DWD_支付成功事实表思路分析
083.DWD_支付成功事实表代码实现
084.DWD_退单事实表整体实现(了解业务)
085.DWD_退款成功事实表整体实现(了解业务)
086.DWD_其它事实表实现思路分析
087.DWD_事实表动态分流思路
088.DWD_开发思路分析
089.DWD_业务数据以及配置表数据读取
090.DWD_在open方法中预加载配置信息
091.DWD_处理广播流中的配置信息
092.DWD_处理主流中的业务数据
093.DWD_将动态分流的事实表写到Kafka主题
094.DWS层介绍
095.Doris_Doris介绍
096.Doris_安装前准备工作
097.Doris_Doris安装以及FE的配置
098.Doris_BE的配置
099.Doris_FE与BE的扩容和缩容
100.Doris_基本概念
101.Doris_Aggregate模型
102.Doris_Unique模型和Duplicate模型
103.Doris_建表其它操作
104.Doris_Range分区
105.Doris_List分区以及分区相关概念
106.Doris_动态分区
107.Doris_Rollup表
108.Doris_物化视图
109.Doris_Flink读写Doris_SQL
110.Doris_Flink读写Doris_API
111.DWS_搜索关键词思路分析
112.DWS_分词工具类
113.DWS_自定义UDTF函数
114.DWS_开发思路分析
115.DWS_读取页面日志数据创建动态表
116.DWS_过滤出搜索行为
117.DWS_分词并和原表字段进行关联
118.DWS_分组、开窗、聚合计算
119.DWS_将聚合结果写到Doris
120.DWS_版本、渠道、地区、新老访客聚合统计思路分析
121.DWS_读取数据并封装为统计的实体类对象
122.DWS_指定Watermark的生成策略
123.DWS_分组、开窗
124.DWS_聚合
125.DWS_将聚合结果写到Doris中
126.DWS_首页、详情页聚合统计思路分析
127.DWS_首页、详情页聚合统计代码实现
128.DWS_独立用户以及回流用户聚合统计思路分析
129.DWS_独立用户以及回流用户聚合统计代码实现
130.DWS_加购独立用户思路分析
131.DWS_加购独立用户代码实现
132.DWS_SKU粒度下单聚合统计需求分析
133.DWS_SKU粒度下单聚合统计开发思路
134.DWS_从Kafka中读取数据并转换为JSON对象
135.DWS_状态+定时器实现去重
136.DWS_状态+抵消实现去重
137.DWS_封装为统计的实体类对象
138.DWS_分组、开窗、聚合计算以及测试可能遇到的问题
139.DWS_在HBaseUtil中封装查询维度的方法
140.DWS_维度关联最基本的实现方式
141.DWS_旁路缓存思路分析
142.DWS_封装RedisUtil工具类
143.DWS_在Redis工具类提供读写数据的方法
144.DWS_旁路缓存代码实现
145.DWS_维度数据发生变化清除缓存数据
146.DWS_关联SPU维度
147.DWS_抽取旁路缓存模板
148.DWS_通过旁路缓存模板关联SKU维度
149.DWS_异步IO介绍
150.DWS_封装异步操作Redis的方法
151.DWS_封装异步操作HBase的方法
152.DWS_发送异步请求关联Sku维度的基本实现
153.DWS_发送异步请求关联Spu维度以及抽取模板
154.DWS_发送异步关联维度模板代码实现
155.DWS_发送异步请求关联SKU维度
156.DWS_关联其它维度并将结果写到Doris
157.DWS_Sku粒度下单聚合统计总结
158.DWS_省份粒度下单聚合统计
159.DWS_去重
160.DWS_封装统计的实体类对象
161.DWS_分组、开窗、聚合计算
162.DWS_关联维度并将结果写到Doris
163.ADS_ADS层介绍
164.ADS_环境准备
165.ADS_总交易额统计思路分析
166.ADS_总交易额统计代码实现
167.ADS_总交易额大屏展示
168.ADS_省份交易额统计思路分析
169.ADS_省份交易额统计代码实现
170.ADS_渠道独立访客数统计思路分析
171.ADS_渠道独立访客数统计代码实现
172.ADS_渠道独立访客大屏展示以及常见错误避坑
173.ADS_总交易额实时展示
174.部署_打包
175.部署_部署前准备工作
176.部署_手动部署到服务器
177.部署_StreamPark介绍
178.部署_StreamPark安装
179.部署_StreamPark其它配置
180.部署_StreamPark中新建项目
181.部署_构建项目
182.部署_发布启动作业
183.部署_合并分支
184.教程总结