实时数仓案例(电商)

0 架构

1 ods

1 日志数据

前端(jar,产生日志数据)-》Nginx(集群间负载均衡)-》日志服务器(springboot,采集数据,jar)-》log,ods(kafka)

本地测试,本地起应用 -》 单机部署,单服务器起应用 -》 集群部署,集群起应用

2 业务数据

前端,jar,产生业务数据-》mysql,配置什么同步-》flinkcdc-》ods(kafka)

2 dim、dwd

1 用户行为日志

ods(Kafka)-> flink -> dwd(kafka)

1 识别新老用户

业务需要

2 日志数据拆分

这3类日志,结构不同,写回Kafka不同主题

2 业务数据

ods(kafka) -> flink -> 1 维度数据,dim(HBASE) 2 事实数据 dwd(kafka)

1 ETL

过滤控制

2 动态分流

维度数据到hbase 事实数据到kafka

怎么分流?

ods的表里面哪些是维度表,哪些是事实表,需要提前知道表的分类信息,后面才可以分流。业务库的表会变化,表的分类信息实时更新,需要动态同步。这里将表的分类信息存在mysql,利用广播流发送。

3 dwm

dmd(kafka)-> flink -> dwm(kafka)

1 访问uv计算

UV,unique visitor

2 跳出明细计算

跳出率=跳出次数 / 访问次数

3 订单主题表

4 支付主题表

4 dws

dwm(kafka)-> flink -> dws(clickhouse)

1 访客主题宽表

2 商品主题宽表

3 地区主题表

4 关键词主题表

5 ads

分层结构

DWM

https://blog.csdn.net/jianghuaijie/article/details/122009653

作用

DWM层的定位是什么,DWM层主要服务DWS,因为部分需求直接从DWD层到DWS层中间会有一定的计算量,而且这部分计算的结果很有可能被多个DWS层主题复用

构建

分主题

dwt

实时数仓没有dwt,因为dwt是累计统计,实时系统不适用

dws

作用

轻度聚合,生成一系列的中间表,提升公共指标的复用性,减少重复加工

分主题,便于管理

构建

分主题

宽表

轻度聚合

数仓主题和主题域

https://blog.csdn.net/qq_22473611/article/details/116702667

1 主题域、主题、实体的关系

主题域下面可以有多个主题,主题还可以划分成更多的子主题,主题和主题之间的建设可能会有交叉现象,而实体则是不可划分的最小单位

2 主题域划分

1 按照业务系统划分

2 按照业务过程划分

3 按照部门划分

数据采集

1 离线

1.用户行为数据

jar-》log-》flume-》kafka-》flume-》hdfs

用户行为数据存储在日志服务器,以.log文件存在,log-》flume-》kafka-》flume-》hdfs

2 业务数据

jar-》mysql-》sqoop-》hdfs

业务数据存储在mysql,使用sqoop导入hdfs

2 实时

1.用户行为数据

前端-》Nginx-》日志服务器-》)log,Kafka(ods

1 前端埋点数据

通过jar包模拟

2 Nginx

https://blog.csdn.net/qq_40036754/article/details/102463099

负载均衡

3 日志服务器

spring boot搭建

首先,Spring 就是一个java框架,spring boot在 Spring 的基础上演进

4 落盘,整合 Kafka

落盘指的是存在日志服务器

生产者-》kafka-》消费者

​ 生产 消费

2 业务数据

jar-》mysql-》flinkcdc-》kafka(ods)

不能使用sqoop,因为sqoop底层为mapreduce,太慢了,改用canal,maxwell或者flinkcdc

数据从mysql读到kafka,不是hdfs

flink-cdc

https://cloud.tencent.com/developer/article/1801766

Change Data Capture(变更数据获取)

ETL

https://www.cnblogs.com/yjd_hycf_space/p/7772722.html

https://blog.csdn.net/qq_33269009/article/details/90522087

https://blog.csdn.net/Stubborn_Cow/article/details/48420997

注意:很多人理解的ETL是在经过前两个部分之后,加载到数据仓库的数据库中就完事了。ETL不仅仅是在源数据—>ODS这一步,ODS—>DW, DW—>DM包含更为重要和复杂的ETL过程。

数据同步

1.数据同步策略

1 全量

存储完整的数据。

2 增量

存储新增加的数据。

3 新增及变化

存储新增加的数据和变化的数据。

4 特殊

某些特殊的表,可不必遵循上述同步策略。

1.例如某些不会发生变化的表

地区表,省份表,民族表等,可以只存一份固定值。

2.拉链表

在第一天同步拉链表的时候,需要同步全量数据,并且设置endtime = 9999;首日过后,每日同步数据到拉链表中就是新增及变化的数据,可以采用分区策略,以999为一个分区表示有效的数据,加上以过期时间为分区;

2.首日,每日

首日同步,视情况,不一定全量

每日同步,视情况


:D 一言句子获取中...