
1) 【一句话结论】
快手的用户行为数据存储与分析采用分层架构(数据湖+实时计算+离线批处理+数据仓库),通过分布式存储(HDFS)、实时计算(Flink)、批处理(Spark/Hive)等技术,实现低延迟实时分析(如点击、观看)与批量历史分析(如购买转化率),关键技术包括数据湖(HDFS+Hudi)、实时计算(Flink)、数据仓库(ClickHouse/星型模型)。
2) 【原理/概念讲解】
数据仓库架构通常分为数据湖、实时计算、离线批处理、数据仓库四层:
3) 【对比与适用场景】
| 模块 | 定义 | 关键技术 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 数据湖 | 存储原始/半结构化数据,支持多种格式 | HDFS, Hudi | 原始数据采集、存储,支持灵活查询 | 需处理数据质量,不适合直接分析 |
| 实时计算 | 低延迟处理数据流 | Flink, Kafka | 用户行为实时统计(如点击、观看实时数) | 需高并发处理,资源消耗大 |
| 离线批处理 | 批量处理历史数据 | Spark, Hive | 用户行为历史分析(如日活、购买转化率) | 处理时间长,适合离线分析 |
| 数据仓库 | 结构化数据存储,支持OLAP查询 | ClickHouse, 星型模型 | 业务分析、报表、决策支持 | 需优化查询,支持复杂聚合 |
4) 【示例】
假设用户点击行为数据通过Kafka发送,Flink实时处理,写入Hudi(数据湖),然后Spark批处理,生成用户点击表(事实表),存储在ClickHouse(数据仓库)。查询示例(伪代码):
SELECT user_id, COUNT(click) AS click_cnt
FROM user_click_fact
GROUP BY user_id;
步骤:1. 用户点击事件写入Kafka;2. Flink消费Kafka,处理数据(过滤无效事件),写入Hudi;3. Spark读取Hudi,生成用户点击表(事实表),存储在ClickHouse;4. 数据仓库查询:
SELECT user_id, SUM(click_cnt) OVER (PARTITION BY user_id ORDER BY time DESC) AS total_click
FROM user_click_fact;
5) 【面试口播版答案】
面试官您好,关于快手的用户行为数据存储与分析,我理解通常采用分层架构。首先,原始用户行为数据(如点击、观看日志)通过Kafka收集,存储在HDFS构成数据湖,支持灵活的原始数据存储。然后,实时计算用Flink处理,比如用户点击的实时统计,低延迟输出结果。离线方面,用Spark批处理历史数据,生成用户行为分析表。最终数据仓库采用ClickHouse,采用星型模型,事实表存储行为数据,维度表存储用户、商品等,便于快速查询分析。关键技术包括分布式存储(HDFS)、实时计算(Flink)、批处理(Spark)、数据仓库(ClickHouse),整个流程保证数据从采集到分析的高效、低延迟,支持业务决策,比如实时推荐或用户画像。
6) 【追问清单】
7) 【常见坑/雷区】