一、数据仓库概述

数据仓库(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 格式

这套采集方案具有高可靠、实时性强的特点,能够满足大规模用户行为数据的采集需求。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐