埋点分析系统 - 数据处理流程
代码路径:
e:\AI工作台\埋点分析系统\clklog-main\
数据处理架构
客户端 SDK (神策)
↓ 埋点事件上报
clklog-receiver (Java)
↓ Kafka 消息队列
clklog-processing (Java)
↓ 数据清洗/转换
ClickHouse (clklog.log_analysis)
↓ TCP 9000 查询
clklog-api (Java / Flask)
↓ REST API
clklog-ui (Vue.js 前端)
子模块说明
1. clklog-receiver(数据接收)
- 技术栈: Java + Spring Boot + Kafka
- 功能: 接收客户端埋点数据,写入 Kafka
- 关键类: KafkaController, ReceiveServiceImpl
2. clklog-processing(数据处理)
- 技术栈: Java + Kafka + ClickHouse
- 功能: 消费 Kafka 消息,清洗转换后写入 ClickHouse
- 包含 IP 地址库(IP2Location)
3. clklog-api(API 服务)
- 技术栈: Java + Spring Boot
- 功能: 提供 REST API 查询 ClickHouse 数据
4. clklog-scripts(定时脚本)
- 技术栈: Shell 脚本
- 功能: ClickHouse 聚合计算定时任务
- 包含: 用户汇总、访客分析、流量趋势、渠道分析等
5. clklog-ui(前端界面)
- 技术栈: Vue.js 2 + Element UI
- 功能: 埋点数据可视化展示
数据表
主表: clklog.log_analysis (MergeTree)
| 属性 | 值 |
|---|---|
| 引擎 | MergeTree |
| 分区键 | stat_date (按日分区) |
| 排序键 | distinct_id |
| 索引粒度 | 8192 |
| 数据量 | ~291 万行 |
| 表大小 | ~165 MB |
核心字段
- 标识: distinctid, eventsessionid, projectname
- 时间: statdate, logtime
- 事件: event, typeContext, lib, lib_method
- 页面: screen_name, title, url
- 元素: elementname, elementcontent, element_type
- 用户: isfirstday, isfirsttime, is_logined
- 设备: os, osversion, model, brand, networktype
- 地域: province, city, country
- 来源: latesttrafficsourcetype, utmsource, firstchannelname
已知数据问题
- eventsessionid 生产库全为空字符串
- element_name 手机端不采集(通常为空)
- 存在 2030-2052 年异常分区
- 排序键 distinct_id 与高频查询条件不匹配
- 缺少数据跳过索引