
1) 【一句话结论】采用“流式计算(Flink)+ 多源CDC(MySQL/Redis)+ 实时数据仓库(ClickHouse)”架构,通过Kafka中转,实现用户观看时长、互动等实时数据接入,保障数据实时性、一致性与容错性,支撑课程热力榜与用户流失预警。
2) 【原理/概念讲解】老师会解释实时数据集成的核心环节:
3) 【对比与适用场景】
| 方案/引擎 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 批处理ETL | 定期(如每小时)从源系统抽取数据,清洗后加载到数据仓库 | 低复杂度,适合非实时场景 | 历史数据分析、报表生成 | 无法支撑秒级实时分析 |
| 实时ETL(流式) | 通过消息队列+流计算引擎,实时捕获数据变更并处理 | 低延迟(秒级),支持实时计算 | 在线教育直播数据、用户行为实时分析 | 需流计算资源,数据清洗复杂 |
| 流计算引擎(Flink vs Spark Streaming) | Flink:Exactly-Once语义,状态管理高效;Spark Streaming:微批处理,语义保证弱 | Flink:高吞吐、低延迟、状态管理优;Spark Streaming:资源占用高、延迟稍高 | 业务对数据一致性要求高(如热力榜准确性)选Flink;资源有限选Spark(需权衡延迟) | Flink需更复杂配置,Spark Streaming易实现但可能数据丢失 |
4) 【示例】假设用户观看数据存储在MySQL表user_watch_log(字段:user_id, course_id, watch_time, event_type),互动数据存储在Redis的Stream(key: watch_stream)和Hash(key: interaction_hash)。步骤:
watch_log_cdc;interaction_cdc;course_id的观看时长总和(sum(watch_time)),写入ClickHouse表realtime_course_heatmap(字段:course_id, total_watch_time, window_end_time);同时,计算用户连续3天无观看的预警,写入user_churn预警表;realtime_course_heatmap获取热力榜,或查询user_churn预警表触发用户流失预警。5) 【面试口播版答案】面试官您好,针对实时直播数据接入需求,我设计一个“多源CDC+流计算+实时存储”的方案。首先,数据源包括MySQL的直播日志表和Redis的互动数据(如点赞、弹幕),通过Debezium(MySQL CDC)和Kafka Connect(Redis CDC)将变更推送到Kafka。然后Flink消费Kafka,实时聚合课程观看时长(按分钟窗口),并写入ClickHouse实时表。最后BI工具查询热力榜,或触发用户流失预警(连续3天无观看则预警)。核心是利用Flink的Exactly-Once语义和Kafka持久化,确保数据实时且可靠,支撑业务实时分析需求。
6) 【追问清单】
7) 【常见坑/雷区】