十、电商数仓用户行为采集平台
·
一、数据仓库概述
数据仓库(Data Warehouse)是为企业制定决策、提供数据支持的系统。其输入数据通常包括三类:
| 数据类型 | 说明 | 存储位置 |
|---|---|---|
| 业务数据 | 用户登录、下单、支付等事务处理产生的数据 | MySQL、Oracle 等数据库 |
| 用户行为数据 | 通过埋点收集的页面浏览、点击、停留、评论等行为 | 日志文件 |
| 爬虫数据 | 通过技术手段获取的外部数据 | 各类存储 |
本文聚焦于用户行为数据的采集,介绍如何通过埋点收集用户行为,并搭建采集平台将数据传输到日志服务器。
二、用户行为日志
2.1 埋点方式
目前主流的埋点方式包括:
| 埋点方式 | 说明 |
|---|---|
| 代码埋点 | 调用埋点 SDK 函数,在业务逻辑中手动上报数据 |
| 可视化埋点 | 集成 SDK 后,业务人员通过"圈选"功能配置采集控件 |
| 全埋点 | 嵌入 SDK 后自动采集全部用户行为,再通过界面配置分析范围 |
2.2 日志内容分类
本项目收集的用户行为日志主要包括五类:
| 日志类型 | 记录内容 |
|---|---|
| 页面浏览记录 | 访客对页面的浏览行为及环境信息 |
| 动作记录 | 用户的业务操作行为(如点击、收藏、加购) |
| 曝光记录 | 页面元素的曝光行为(如商品曝光、广告曝光) |
| 启动记录 | 用户启动应用的行为及启动信息 |
| 错误记录 | 用户使用过程中的报错信息 |
2.3 日志格式
日志结构分为两类:页面日志和启动日志。
2.3.1 页面日志
一条完整的页面日志包含:
- 一个页面浏览记录
- 若干动作记录(actions)
- 若干曝光记录(displays)
- 一个错误记录(err,可选)
- 环境信息(common)
2.3.2 启动日志
一条完整的启动日志包含:
- 一个启动记录(start)
- 一个错误记录(err,可选)
- 环境信息(common)
三、数据采集通道设计
3.1 采集链路
用户行为数据的采集链路为:
应用端 → 日志文件 → Flume → Kafka → HDFS/Hive/Flink
| 环节 | 组件 | 说明 |
|---|---|---|
| 日志生成 | 应用端埋点 | 采集用户行为,写入本地日志文件 |
| 日志采集 | Flume | 实时采集日志文件,发送到 Kafka |
| 消息缓冲 | Kafka | 接收 Flume 发送的数据,提供缓冲 |
| 数据存储 | HDFS/Hive/Flink | 持久化存储,供离线分析,实时分析 |
3.2 Flume 配置方案
3.2.1 Source 选型:TailDirSource
选择 TailDirSource 的原因:
| Source 类型 | 特点 | 是否推荐 |
|---|---|---|
| TailDirSource | 支持断点续传、多目录监控 | ✅ 推荐 |
| ExecSource | 实时采集,但 Flume 停止时会丢数据 | ❌ 不推荐 |
| SpoolingDirectorySource | 支持断点续传,但只能监控目录 | ⚠️ 可用 |
TailDirSource 是生产环境的首选,它解决了断点续传和多目录监控的问题。
3.2.2 Channel 选型:KafkaChannel
采用 KafkaChannel 的优势:
- 省去 Sink 组件,直接写入 Kafka
- 提高传输效率,减少一跳
- 利用 Kafka 的高可靠和高吞吐特性
3.2.3 配置文件示例
# 定义组件
a1.sources = r1
a1.channels = c1
# 配置 Source:TailDirSource
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /opt/module/applog/log/app.*
a1.sources.r1.positionFile = /opt/module/apache-flume-1.10.1-bin/taildir_position.json
# 配置 Channel:KafkaChannel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = hadoop1:9092,hadoop2:9092
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false
# 组装
a1.sources.r1.channels = c1
关键配置说明:
| 配置项 | 说明 |
|---|---|
filegroups.f1 |
监控的日志文件路径,支持通配符 |
positionFile |
记录文件读取的位置,实现断点续传 |
parseAsFlumeEvent |
设为 false,不解析为 Flume Event 格式 |
3.3 日志校验拦截器
为保证数据质量,可配置拦截器对日志格式进行校验:
# 配置拦截器
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = com.atguigu.flume.interceptor.ETLInterceptor
# 绑定拦截器
a1.sources.r1.interceptors = i1
拦截器的主要功能:
- 校验日志是否为合法的 JSON 格式
- 过滤不符合格式的脏数据
- 统计日志采集的成功率和失败率
四、总结
用户行为采集平台的核心要点:
| 要点 | 说明 |
|---|---|
| 埋点方式 | 代码埋点、可视化埋点、全埋点 |
| 日志类型 | 页面日志、启动日志 |
| 采集链路 | 日志文件 → Flume → Kafka → HDFS |
| Source 选型 | TailDirSource(支持断点续传) |
| Channel 选型 | KafkaChannel(省去 Sink,提高效率) |
| 数据校验 | 通过拦截器校验 JSON 格式 |
这套采集方案具有高可靠、实时性强的特点,能够满足大规模用户行为数据的采集需求。
更多推荐




所有评论(0)