
1) 【一句话结论】针对不良资产数据(结构化/非结构化、历史+实时),采用“数据湖(原始数据存储)+ 数据仓库(主题化分析)+ 实时流处理(CDC+流计算)”混合架构,通过增量加载(CDC)保证数据仓库与数据湖同步,结合冷热数据分层(热数据入仓,冷数据归档)和流处理性能调优(Flink并行度、窗口设置),支撑风险分析与价值评估,同时通过数据质量治理(清洗、校验、监控)保障数据可信度。
2) 【原理/概念讲解】老师解释各组件作用:
3) 【对比与适用场景】
| 对比项 | 数据仓库 | 数据湖 |
|---|---|---|
| 定义 | 主题化、结构化存储 | 原始数据存储(结构化/非结构化) |
| 数据类型 | 结构化数据(如财务报表) | 原始数据(如财报、抵押物图片、交易日志) |
| 处理方式 | ETL(抽取-转换-加载) | ELT(抽取-加载-转换,或直接查询) |
| 使用场景 | 历史数据分析、报表 | 灵活分析、非结构化数据、实时数据 |
| 注意点 | 需预先定义数据模型 | 存储成本高,需数据治理 |
| 集成机制 | 增量加载(CDC技术,如Debezium) | 实时同步(Kafka+流处理) |
| 冷热数据分层 | 热数据入仓(高频访问) | 冷数据归档(低成本存储) |
| 实时处理调优 | 支持流计算(Flink并行度、窗口) | 流处理性能(Flink参数优化) |
4) 【示例】
架构设计:
伪代码(Flink实时计算现金流,写入数据湖):
from pyflink.table import *
from pyflink.table.descriptors import *
stream_env = StreamTableEnvironment.create()
stream_env.connect(
Kafka()
.topic("transaction_stream")
.start_from_latest()
.property("bootstrap.servers", "kafka:9092")
.property("group.id", "cashflow_processor")
)
stream_env.connect(
HDFS()
.path("hdfs://namenode:8020/warehouse/realtime/cashflow")
.format("org.apache.flink.table.fileformat.parquet")
)
stream_env.insert_table(
"transaction_stream",
stream_env.select(
"enterprise_id, amount, timestamp",
from_(
stream_env.connect(Kafka()).select("enterprise_id", "amount", "timestamp")
)
)
)
stream_env.insert_table(
"realtime_cashflow",
stream_env.select(
"enterprise_id, sum(amount) as cashflow",
from_(
stream_env.connect(Kafka()).select("enterprise_id", "amount", "timestamp")
).window(TumblingProcessingTimeWindow.of("5 minutes"))
)
)
stream_env.execute("cashflow_processor")
5) 【面试口播版答案】
面试官您好,针对不良资产数据的特点,我建议采用“数据湖+数据仓库+实时流处理”的混合架构。首先,数据湖作为原始数据存储层,用HDFS或云对象存储(如阿里云OSS)存储企业财报、抵押物信息等结构化与非结构化数据,保持数据原始性。数据仓库基于数据湖构建分析主题(如企业风险、抵押物价值),采用星型模型,维度表(企业、时间、抵押物)和事实表(财务指标、交易记录),支持多维分析。为了保证实时性,引入Kafka作为消息队列,通过CDC(如Debezium)捕获数据库变更,同步到数据湖,再由Flink实时计算企业现金流、抵押物价值变化,结果写入数据湖的实时分区。数据质量方面,通过ETL流程中的数据清洗(去重、缺失值补全)、数据校验(财务报表勾稽关系校验)、数据质量监控(ETL日志、指标仪表盘),努力保障数据准确完整。这样既能满足历史数据分析需求,又能支持实时风险监控,为不良资产价值评估提供数据支持。
6) 【追问清单】
7) 【常见坑/雷区】