埋点数据仓库建设全流程(从采集到OLAP)
请描述一个完整的埋点数据仓库建设方案,从客户端埋点(代码埋点/全埋点/可视化埋点)、数据采集(SDK→Kafka)、ETL清洗(Flink/PySpark)、数仓分层(ODS/DWD/DWS/ADS)到OLAP查询(ClickHouse/Doris)的全链路,包括埋点规范设计(事件名/属性/全局属性)和反作弊策略。
回答
我是大山
埋点数仓全流程:
1. 埋点设计:
- 事件模型:
{event_name, distinct_id, time, properties{...}} - 公共属性:app_version, os, device_id, network_type, page_url
- 规范:事件名蛇形命名(
page_view、button_click),属性小驼峰
2. 数据采集:
客户端SDK → Kafka (topic: app_event_raw)
三层SDK:Android/iOS/Web → 统一JSON格式
3. 实时ETL(Flink):
- 解析JSON、字段校验
- IP解析地理位置、UA解析设备信息
- 反作弊:频率检测(同IP每秒>100次→标记)、设备ID黑名单
- 写入Kafka (topic: app_event_clean)
4. 数仓分层:
| 层级 | 内容 | 存储 |
|---|---|---|
| ODS | 原始JSON日志 | Kafka + HDFS Parquet |
| DWD | 解析后的明细宽表 | Hive ORC |
| DWS | 事件级聚合(日活、事件pv/uv) | ClickHouse |
| ADS | 指标看板、留存、漏斗分析 | Redis/Doris |
5. 指标计算:
- 日活(DAU):
COUNT(DISTINCT distinct_id) WHERE event='app_start' - 漏斗:窗口函数按用户和时间排序,计算Step转化率
- 留存:次日/7日/30日留存计算
6. 反作弊策略:
- 异常流量过滤:同IP高并发、设备伪造
- 重复事件去重(event_id + time + device_id去重)
- 爬虫过滤:User-Agent + 行为模式识别