1. 企业数据湖需求分析与AWS服务选型

建设企业数据湖,第一步不是打开控制台创建S3桶,而是把"业务要什么、数据长什么样、规模会涨到多大、监管允许怎么用"这四件事问清楚。需求分析的质量直接决定后续选型是否返工:一个只按"先建湖再说"思路搭起来的架构,往往在半年后因为权限模型撑不住、查询引擎选错、流批链路割裂而被迫重构。本节围绕需求调研的四个维度展开,并给出AWS数据湖相关服务的适用边界与一份可填写的选型决策矩阵。

一、四个必须先量化的需求维度

业务目标决定数据湖的"用途画像"。常见目标可归为四类:报表与BI(要求低延迟交互查询、强一致口径)、自助式探索分析(要求schema灵活、按需计费)、机器学习特征工程(要求大批量扫描、与训练框架集成)、实时风控与监控(要求秒级端到端延迟)。同一个湖可以同时服务多类目标,但必须明确哪一类是主目标,因为它决定存储格式、分区策略和计算引擎的优先级。

数据源类型决定接入方式。结构化数据(MySQL、PostgreSQL、Oracle等业务库)通常走CDC或批量抽取;半结构化数据(JSON日志、Kafka消息、API响应)需要schema推断与演化能力;非结构化数据(图片、音视频、PDF)直接以对象形式落湖,靠元数据目录管理。要逐源记录:源系统、抽取频率、单次增量大小、是否含PII、是否有主键与更新时间戳。

数据量级与增长趋势决定存储分层与计算规格。建议按"当前全量 + 日增量 × 保留周期"估算。例如某零售企业:订单库全量800GB、日增12GB;埋点日志日增300GB、保留13个月;则一年后原始层规模约为 800GB + 12GB×365 + 300GB×395 ≈ 123TB(含副本与中间层会更高)。这个量级直接排除"单机数据库硬扛"的方案,指向对象存储 + 分布式计算。

合规要求决定权限与治理的复杂度。需明确:数据驻留区域(是否必须留在某一Region)、加密要求(静态/传输/密钥自管)、PII字段清单、审计留存年限、跨境传输限制。合规约束往往是选型的硬性否决项,例如要求列级权限与集中审计时,仅靠S3桶策略就不够,必须引入Lake Formation。

二、AWS数据湖服务的能力边界

把候选服务按"在数据湖中承担的角色"分类,比逐个背功能更容易选对:

  • S3:存储底座。所有数据以对象形式落地,配合分区、生命周期策略、版本控制、加密。它是唯一不可替代的一层。
  • Glue:元数据目录(Data Catalog)+ 无服务器ETL。负责爬取schema、维护表定义、跑Spark/Python作业做清洗转换。
  • Lake Formation:集中权限与治理层。提供表/列/行级权限、跨账户共享、基于标签的访问控制,是合规场景的关键组件。
  • Athena:无服务器交互式SQL查询,直接查S3,按扫描量计费。适合探索分析与低频报表。
  • Redshift:数据仓库,适合高并发、复杂JOIN、固定口径的BI报表,可与S3通过Spectrum或零ETL集成。
  • EMR:托管Hadoop/Spark集群,适合大规模批处理、需要精细调优或已有Spark生态迁移的场景。
  • Kinesis:实时流接入(Data Streams / Firehose),适合秒级数据管道。
  • MSK:托管Kafka,适合已有Kafka生态、需要多消费者组与高吞吐持久化的场景。

关键判断逻辑是:存储统一用S3,元数据统一用Glue Catalog,权限统一用Lake Formation,而计算与接入层按负载特征选择。批处理优先Glue(无服务器、成本低)或EMR(可控、重负载);交互查询在Athena与Redshift之间按"扫描量 vs 并发量"取舍;实时接入在Kinesis与MSK之间按"是否已有Kafka"取舍。

数据湖需求维度 → AWS服务选型映射 需求维度 业务目标 报表/探索/ML/实时 决定引擎优先级 数据源类型 结构化/半结构/非结构 决定接入方式 数据量级与增长 全量+日增×周期 决定存储与规格 合规要求 驻留/加密/PII/审计 决定治理复杂度 延迟与并发 秒级/分钟/小时 决定流批架构 数据湖角色层 接入层 批量抽取 / 实时流 存储层 对象存储 + 分层 目录与治理层 元数据 + 权限 计算层 批处理 / 交互查询 服务层 BI / ML / 应用 统一底座原则 S3 + Glue Catalog + Lake Formation 候选AWS服务与适用场景 S3 存储底座|分区、生命周期、加密、版本控制 Glue 元数据目录 + 无服务器ETL|schema爬取与转换 Lake Formation 集中权限治理|表/列/行级、跨账户、标签控制 Athena / Redshift 交互查询|按扫描量 vs 高并发复杂JOIN EMR 大规模批处理|Spark/Hadoop、精细调优 Kinesis / MSK 实时接入|无服务器流 vs 托管Kafka生态 选型顺序:先定存储与目录 → 再定治理 → 最后按负载选计算与接入 合规为硬约束时,Lake Formation 优先于桶策略

三、选型决策矩阵

把上面的判断固化成一张可填写的矩阵,团队在评审时逐行打勾即可。下表以某零售企业数据湖为例,列出典型负载与推荐服务,并给出关键取舍理由。

负载场景 数据特征 推荐服务 备选 取舍理由
业务库批量入湖 MySQL全量800GB,日增12GB Glue ETL + S3 EMR 无服务器、按需计费,日增量小无需常驻集群
埋点日志实时接入 日增300GB,秒级延迟 Kinesis Data Streams + Firehose MSK 无Kafka存量,Kinesis运维成本更低
自助探索分析 Parquet分区表,查询频率低 Athena Redshift Spectrum 按扫描量计费,无集群闲置成本
固定口径BI报表 高并发、复杂JOIN、SLA严格 Redshift Athena + 物化视图 并发与复杂查询性能更可控
ML特征工程 TB级扫描、Spark生态 EMR + Glue Catalog Glue 需要精细调优与自定义库
PII列级权限 含手机号、身份证字段 Lake Formation S3桶策略 + IAM 桶策略无法做到列级与集中审计
选型口诀:存储统一S3,目录统一Glue Catalog,权限统一Lake Formation;计算层按"批/交互/实时"三分,接入层按"是否已有Kafka"二分。合规是硬约束,先过合规再谈成本。

四、一个可复用的调研清单

在项目启动会上,用下面这份清单逐项确认,可以避免后期返工。每项都要有明确答案,不能留"待定":

  1. 主业务目标是什么?次要目标有哪些?各自的延迟与并发要求?
  2. 数据源清单:源系统、抽取方式(CDC/批量/流)、频率、单次增量大小。
  3. 数据量估算:当前全量、日增、保留周期、是否含副本与中间层。
  4. 合规约束:驻留Region、加密方式、PII字段、审计留存年限、跨境限制。
  5. 权限模型:需要表级、列级还是行级?是否跨账户共享?
  6. 查询模式:交互式还是批处理?扫描量级与并发峰值?
  7. 团队技能:是否已有Spark、Kafka、SQL调优经验?
  8. 成本边界:月度预算上限,以及可接受的按量计费波动范围。

把这份清单的答案填入决策矩阵,选型结论就自然浮现。需要强调的是,选型不是一次性动作:当数据量从TB级涨到PB级、或合规要求从"内部审计"升级为"等保三级"时,计算层与治理层都可能需要调整。因此架构上要保留替换空间——存储与目录保持稳定,计算与接入层做成可插拔,这样后续演进才不会推倒重来。