埋点分析系统 - 数据处理流程

📑 目录
  1. 数据处理架构
  2. 子模块说明
  3. 数据表
  4. 已知数据问题

埋点分析系统 - 数据处理流程

代码路径: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

已知数据问题

  1. eventsessionid 生产库全为空字符串
  2. element_name 手机端不采集(通常为空)
  3. 存在 2030-2052 年异常分区
  4. 排序键 distinct_id 与高频查询条件不匹配
  5. 缺少数据跳过索引