2、金融数据湖总体架构设计:分层架构与技术选型

聊到金融数据湖,我第一个想说的就是分层。很多团队一上来就搞数据湖,结果数据往里一丢,变成了数据沼泽。嗯,这里要注意,分层不是花架子,它是整个数据体系的骨架。

2.1 为什么金融数据湖必须分层?

说白了,金融数据太敏感了。一笔交易从产生到最终报表,中间经过多少道加工?你想想看,如果所有数据都混在一起,出了问题你根本查不到源头。

我个人习惯把数据湖分成四层:ODS、DWD、DWS、ADS。每一层都有明确的职责,就像工厂里的流水线,每个工位只干一件事。

核心原则:每一层只做一件事,层与层之间通过标准接口交互。这样出了问题,你只需要查一层,而不是翻遍整个湖。

2.2 分层架构详解

ODS层(操作数据存储)

这一层是数据的入口。所有源系统的数据,原封不动地搬到这里。我在项目中遇到过,有些团队在ODS层就开始做清洗,结果源系统一改格式,整个下游全崩了。

  • 数据格式:保持源系统原始格式
  • 存储周期:通常保留7-30天
  • 典型场景:交易流水、客户信息、风控日志

DWD层(明细数据层)

这一层开始做正经事了。数据清洗、去重、格式统一。我记得有一次做反洗钱项目,DWD层花了整整两周做数据标准化,因为不同渠道的客户姓名格式完全不一样。

  • 数据格式:统一为Parquet/ORC列式存储
  • 存储周期:按业务需求,通常3-6个月
  • 典型场景:标准化后的交易明细、客户画像

DWS层(汇总数据层)

宽表、汇总、轻度聚合。这一层是给分析师和报表系统用的。你想想看,如果每次跑一个月度报表都要扫描几亿条明细,那得等到什么时候?

  • 数据格式:宽表结构,预聚合
  • 存储周期:按业务需求,通常1-2年
  • 典型场景:客户月度交易汇总、产品日销售统计

ADS层(应用数据服务层)

这一层直接面向业务应用。数据已经高度定制化,可能是某个风控模型的输入,也可能是某个实时大屏的数据源。

  • 数据格式:按应用需求定制
  • 存储周期:按应用需求
  • 典型场景:实时风控特征、个性化推荐数据

2.3 技术选型:我的实战经验

技术选型这块,我踩过不少坑。先说结论:没有银弹,只有最适合你场景的。

技术组件 适用场景 我的建议
Hadoop HDFS 海量数据存储,批处理 金融数据湖的基石,别想着绕开它
Apache Spark 大规模批处理,ETL DWD/DWS层的首选,性能稳定
Apache Flink 实时流处理,低延迟 ADS层实时场景,比如风控
Delta Lake 数据湖ACID事务,版本管理 强烈推荐,解决数据一致性问题

避坑指南:我曾经在一个项目中,为了追求"新技术",用Flink做所有事情。结果批处理性能还不如Spark的一半。后来老老实实把批处理切回Spark,实时部分保留Flink,性能直接翻倍。

2.4 数据流向设计

数据怎么流?这个问题看似简单,但做不好就是灾难。我见过一个项目,数据从ODS到DWD走了三条不同的链路,结果对账永远对不平。

我的做法是:单向流动,分层加工。数据只能从上一层流到下一层,不允许跨层访问。这样出了问题,你只需要查一层。

警告:千万不要让业务系统直接访问ODS层!我曾经见过一个团队,为了"快速响应",让报表系统直接读ODS。结果源系统一变更,报表全乱了,花了整整一周才排查出来。

2.5 核心架构图

下面这张图是我做金融数据湖项目时常用的架构。它清晰地展示了数据从采集到应用的完整路径。

金融数据湖分层架构图 数据源层 交易系统 | 风控系统 | 客户系统 | 外部数据 ODS层(操作数据存储) 原始数据接入 | 增量/全量同步 | 短周期保留 DWD层(明细数据层) 数据清洗 | 标准化 | 去重 | 列式存储 DWS层(汇总数据层) 宽表构建 | 轻度聚合 | 预计算 | 多维分析 ADS层(应用数据服务层) 实时风控 | 报表系统 | 数据产品 | 机器学习 Flink CDC Spark Spark SQL Flink

2.6 数据流向的实战要点

数据流向设计,说白了就是回答三个问题:数据从哪里来?经过哪些加工?最终到哪里去?

  1. 采集阶段:用Flink CDC实时捕获数据库变更,或者用Sqoop/DataX做批量同步。我个人习惯,核心交易数据用CDC,历史数据用批量。
  2. 加工阶段:ODS到DWD用Spark做ETL,DWD到DWS用Spark SQL做聚合。实时场景下,Flink直接从ODS消费,加工后写入ADS。
  3. 服务阶段:ADS层的数据通过API或者消息队列对外提供服务。我曾经见过一个项目,让分析师直接查DWS层,结果一个复杂查询把整个集群拖垮了。

我的经验:数据流向设计时,一定要考虑数据回滚。金融数据不允许出错,一旦发现数据有问题,要能快速回滚到上一个版本。Delta Lake的版本管理功能在这里帮了大忙。

2.7 避坑指南:我踩过的三个坑

做金融数据湖这几年,我踩过的坑不少。挑三个最典型的说说:

  • 坑一:ODS层数据保留太短。我曾经有个项目,ODS只保留7天,结果第8天发现数据有问题,想回溯都来不及。后来我建议至少保留30天。
  • 坑二:DWD层数据标准化做得不够。不同系统对"客户姓名"的定义不一样,有的用"姓名",有的用"客户名称"。如果不统一,下游分析全是坑。
  • 坑三:ADS层直接暴露给业务系统。业务系统频繁查询,导致ADS层性能下降,反过来影响数据加工。后来加了缓存层,问题才解决。

好了,以上就是金融数据湖分层架构的核心内容。记住,分层不是目的,目的是让数据可管、可控、可追溯。下一章我们会聊到具体的数据建模方法,到时候再细说。


蓝海数据掘金营,专注资料整理