
1) 【一句话结论】针对好未来多源数据(在线平台、线下培训、素质教育品牌)的业务,设计分层式数据仓库架构,融合实时流处理(Flink)与批处理(Spark),通过CDC(Debezium)+主键冲突检测保障数据一致性,实现实时分析(如用户行为、课程转化率)与离线深度分析(如用户画像、业务指标)的统一,支撑业务决策。
2) 【原理/概念讲解】数据仓库架构分为四层,各层功能及类比:
3) 【对比与适用场景】以实时存储(Kafka+Hudi)和离线存储(HDFS+Hive)为例:
| 对比维度 | 实时存储(Kafka+Hudi) | 离线存储(HDFS+Hive) |
|---|---|---|
| 定义 | 分布式消息队列(Kafka)+ 实时存储引擎(Hudi) | Hadoop分布式文件系统(HDFS)+ Hive数据仓库 |
| 特性 | 高吞吐(百万级QPS)、低延迟(毫秒级)、持久化存储;支持实时写入与历史查询 | 大规模存储(PB级)、支持复杂SQL查询、适合离线分析;写入延迟(分钟级)、查询延迟(分钟级) |
| 使用场景 | 实时数据采集(如用户点击、购买事件)、流处理输入 | 历史数据存储(如用户行为日志、课程数据)、报表分析、数据挖掘 |
| 注意点 | 需要消费端处理能力匹配,避免数据堆积;消息丢失风险(需配置持久化、重试机制);写入延迟可能影响实时分析 | 查询延迟较高,不适合实时查询;数据写入延迟导致历史数据更新滞后 |
多源数据接入方式:
4) 【示例】假设从在线平台获取用户点击事件(数据字段:user_id, event_type, event_time, click_coord, course_id),处理流程:
伪代码(Flink处理逻辑,过滤无效点击规则):
from pyflink.table import *
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(4)
table_env = TableEnvironment.create(env)
stream = table_env.from_path("kafka://localhost:9092/user_click")
filtered = stream.filter(
"click_coord is null or (click_coord.x < 0 or click_coord.x > 1000 or click_coord.y < 0 or click_coord.y > 600) or " +
"event_time < now() - INTERVAL '1' HOUR"
)
aggregated = filtered.group_by("user_id").agg(
sum("click_count").as("total_clicks"),
count("event_time").as("click_times")
)
aggregated.execute_insert("hudi://hdfs/user_click_realtime")
5) 【面试口播版答案】面试官您好,针对好未来的多源数据(在线平台、线下培训、素质教育品牌),我设计的架构是分层式,结合实时流处理与批处理,核心是保障数据一致性和满足业务分析需求。具体来说,分为四层:数据采集层用ELT方式接入多源数据,通过Debezium捕获变更;数据存储层用Kafka处理实时流,Hudi支持实时写入,HDFS+Hive存储历史数据;数据服务层用星型模型构建数据集市,生成分析指标;应用层提供BI接口。比如用户点击事件,从学习APP通过Debezium写入Kafka,Flink实时处理并写入Hudi,同时Spark批处理历史日志生成用户画像,这样既能实时看用户活跃度,又能做深度分析,满足业务需求。多源数据一致性通过主键冲突检测(如用户ID)和版本控制(时间戳)保证,比如冲突时优先最新数据。数据血缘通过工具记录流转路径,确保可追溯。
6) 【追问清单】
7) 【常见坑/雷区】