
采用“流式+批式”混合架构,通过数据清洗、消息队列解耦采集与处理,实时特征用Flink滑动窗口(30分钟)计算并存储到时序数据库,离线特征用Spark增量更新(时间戳过滤)写入宽表,配套数据质量监控(校验+告警),确保特征及时准确。
用户行为日志分为实时行为(如点赞、点击,需秒级响应,反映用户当前状态)和离线行为(如历史浏览,周期性分析,反映长期趋势)。特征工程分为:
数据管道架构设计:
类比:实时特征是“实时心跳”(反映用户当前行为状态),离线特征是“长期健康报告”(反映用户长期兴趣)。
| 模块 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据清洗 | 采集后过滤无效数据 | 过滤无效行为(如无效点赞) | 确保数据质量 | 规则需明确(如行为类型校验) |
| 实时处理 | Flink消费Kafka,滑动窗口 | 低延迟(秒级)、状态管理 | 需实时特征(如最近30分钟点赞) | 需消息队列缓冲,处理延迟受限于流处理和存储 |
| 离线处理 | Spark增量计算(时间戳过滤) | 高计算能力、复杂聚合 | 需复杂特征(如用户画像) | 计算周期长,需增量更新避免全量计算 |
| 扩展性 | 消息队列分区调整 | 吞吐量随分区数增加 | 日志量激增时调整Kafka分区 | 分区数需根据日志量动态调整 |
以用户点赞行为为例:
like、时间戳非法) → 写入Kafka(主题:user_like)。tumbling window(30 min),聚合每个用户的点赞数 → 输出到InfluxDB(测量名:user_like_count,字段:user_id, count, ts)。user_profile,列族:tags, active_time)。(约90秒)
面试官您好,针对从用户行为日志到推荐特征工程的数据管道设计,我的核心思路是构建“流式+批式”混合架构,兼顾实时特征的低延迟和离线特征的复杂度。首先,数据采集层用Flume收集用户行为日志,先进行数据清洗(过滤无效行为,如行为类型非点赞、时间戳非法),然后推送到Kafka消息队列,解耦采集与处理。处理层分两部分:实时处理用Flink消费Kafka中的点赞等行为日志,配置30分钟滑动窗口,聚合每个用户的点赞数,处理时间偏移(允许延迟秒级),输出到时序数据库(如InfluxDB),支持低延迟查询;离线处理用Spark周期性(如每天)读取增量日志(按时间戳过滤,避免全量计算)和用户信息表,计算用户画像(如兴趣标签、活跃度),写入宽表(如HBase),用于复杂特征。存储方面,时序数据库存储实时行为特征,宽表存储离线特征,特征服务通过API拉取。数据质量监控方面,实时处理加入数据校验(如行为类型是否合法),离线处理加入结果校验(如用户画像标签数量是否合理),并设置告警机制(如数据量突变或特征值异常)。这样既能保证实时特征及时更新(30分钟内完成计算),又能支持离线特征的复杂计算(如用户画像每天更新),满足推荐系统的需求。
allowLateness),通过时间窗口的滑动机制,确保大部分数据在30分钟内计算完成。