为流式摄取选择 Kinesis 服务。
亚秒级消费者控制处理 → Kinesis Data Streams。完全托管的交付到 S3/Redshift/OpenSearch,并可选格式转换 → Kinesis Data Firehose。
原因: KDS 保留记录(24 小时至 365 天)并支持多个消费者。Firehose 没有重放功能;以重放换取零操作交付。
AWS Certified Data Engineer Associate
最后审核:2026年5月
DEA-C01 考试涉及的架构模式快速参考。从头到尾阅读,或跳转到任意章节。
为流式摄取选择 Kinesis 服务。
亚秒级消费者控制处理 → Kinesis Data Streams。完全托管的交付到 S3/Redshift/OpenSearch,并可选格式转换 → Kinesis Data Firehose。
原因: KDS 保留记录(24 小时至 365 天)并支持多个消费者。Firehose 没有重放功能;以重放换取零操作交付。
流在高峰期遇到 ProvisionedThroughputExceeded 错误。
重新分片。每个分片支持 1 MB/s 或 1,000 条记录/秒的摄取,2 MB/s 的流出。使用统一的分区键;为每个消费者 >2 MB/s 启用 Enhanced Fan-Out。
原因: 热分区键将流量集中在一个分片上。随机或基于哈希的键分散负载。
流式工作负载具有突发性和不可预测性;手动重新分片带来操作痛苦。
Kinesis Data Streams 采用按需容量模式。默认自动扩展到 200 MB/s;按数据量付费。
多个消费者读取同一流时达到 2 MB/s/分片的读取限制。
Enhanced Fan-Out。每个消费者通过基于推送的 HTTP/2 SubscribeToShard 获得专用 2 MB/s/分片。
最大化生产者端应用程序的摄取吞吐量。
Kinesis Producer Library (KPL) 结合聚合 + 收集。将多条用户记录批量处理成一条 Kinesis 记录(最大 1 MB);降低 PUT 成本。
原因: 单条记录的 PutRecord 在 5 万事件/秒时受速率限制且成本高昂。KPL 在客户端进行聚合。
将 JSON 点击流以 Parquet 格式存入 S3,并按事件时间分区。
Firehose 结合记录格式转换(JSON → Parquet),使用 Glue Data Catalog 表 + 基于事件时间戳的动态分区。
原因: Parquet + 分区显著降低 Athena 扫描成本。动态分区避免了单独的 ETL 步骤。
某些记录在 Firehose 转换或交付过程中失败;需要捕获它们以进行重放。
将 S3 备份配置为 `AllData` 或 `FailedDataOnly`。失败的记录将带错误元数据存储在配置的前缀下。
如果代理可用区 (AZ) 失败,确保 MSK 中没有数据丢失。
在 3 个可用区中复制因子 ≥ 3,并且 `min.insync.replicas=2`,生产者 `acks=all`。通过无 ZooKeeper 的 KRaft 或 3 可用区代理部署启用多可用区。
将数据从 MSK 流式传输到 S3、OpenSearch 或 RDS,而无需管理 Kafka Connect 集群。
MSK Connect 与托管连接器(Confluent S3 Sink,用于 CDC 的 Debezium)。根据 WCU 自动扩展工作器。
主题为每个键存储记录的最新版本;旧版本可以丢弃。
设置主题 `cleanup.policy=compact`。Kafka 为每个键保留最新值;较旧的相同键记录符合压缩条件。
通过 Direct Connect,每周定期从本地 NFS 向 S3 传输 10 TB 数据。
AWS DataSync 结合本地代理 + 计划任务。验证数据完整性,支持增量传输,并行。
原因: DataSync 比 aws-cli sync 更快,并原生处理带宽限制、重试和验证。
按计划将 SaaS API(Salesforce、ServiceNow、Zendesk)的数据拉取到 S3 中。
AWS AppFlow。托管连接器,处理 OAuth,可按计划或事件触发,将 Parquet 写入 S3。
以最小的停机时间将本地 SQL Server 的持续更改复制到 Aurora MySQL。
AWS DMS 结合全量加载 + CDC 任务。在 DMS 之前使用 Schema Conversion Tool (SCT) 进行异构模式/代码转换。
DMS 复制实例失败 — 复制中断。
在复制实例上启用 Multi-AZ。在另一个可用区中进行同步备用;自动故障转移。
需要对 OLTP Aurora 数据进行近实时分析,无需 ETL 管道。
Aurora zero-ETL integration to Redshift。Aurora 数据持续复制到 Redshift;查询在几秒钟内看到新数据。
原因: 消除了 OLTP 到数据仓库用例的 DMS / Glue / 自定义 CDC 管道。
将 100 TB 历史归档数据从本地迁移到 S3;带宽受限。
AWS Snowball Edge Storage Optimized。将物理设备运送到现场;复制数据;再运回。
源 JSON 包含嵌套数组;下游关系分析需要展平的行。
Glue PySpark `Relationalize` 转换(或 DataFrame 中的 `explode()`)将嵌套数组展平为单独的行/表。
Glue Crawler 从杂乱的 CSV 数据中推断出模糊类型 (`choice<int,string>`)。
应用 `ResolveChoice` 转换 — 转换为特定类型或投影到结构体。或者通过强制执行模式在源头修复。
Glue ETL 作业每小时对不断增长的 S3 数据运行;需要仅处理新文件。
启用 Glue 作业书签。Glue 跟踪已处理的文件/分区,并在重新运行时跳过它们。
原因: 避免重新处理整个数据集。增量 ETL 管道所需。
在大量聚合期间,Glue Spark 作业因驱动程序上的 OutOfMemoryError 而失败。
切换到 G.2X 或 G.4X 工作器(更多驱动程序内存)或启用 `--enable-glue-datacatalog` 下推谓词以减少混洗数据。
使用托管基础设施对 Kinesis 源运行持续的 Spark Structured Streaming。
AWS Glue 流式 ETL 作业。底层是 Spark Structured Streaming;检查点到 S3。
业务分析师需要清理和转换数据,而无需编写代码。
AWS Glue DataBrew。基于可视化的配方转换(250+),分析,血缘。输出到 S3、Redshift、RDS。
仅在 Crawler 成功更新 Data Catalog 后才运行 Glue ETL 作业。
带有条件触发器的 Glue Workflow。Crawler 成功 → 触发 ETL 作业。失败 → 跳过/警报。
Crawler 将所有 CSV 列推断为 `string` — 需要日期和数字类型。
在抓取之前添加自定义 Glue 分类器(Grok 模式或列提示)。或者预先编写带有显式类型的标题行。
Kafka 上的多个生产者/消费者需要模式演进,而不会相互破坏。
AWS Glue Schema Registry 带有兼容性规则(BACKWARD/FORWARD/FULL)。生产者注册模式;消费者获取 + 验证。
为 Spark ETL 在 EMR 和 Glue 之间进行选择。
长期运行的定制 Spark,深度调优,多种框架(Hive, Presto, Flink)→ EMR。无服务器按作业付费的 ETL,集成 Glue Data Catalog → Glue。突发/不可预测的 Spark → EMR Serverless。
间歇性 Spark/Hive 作业;想要零集群操作和无空闲计算。
EMR Serverless。预初始化容量池以实现低延迟启动;按作业扩展;按 vCPU-小时付费。
混合按需核心 + Spot 任务节点以优化 EMR 成本。
具有每种类型目标容量的实例群。核心群组按需用于 HDFS 稳定性;任务群组 Spot,具有多样化的实例类型。
标准化到 Kubernetes;希望 EMR Spark 作业与其他工作负载共享集群。
EMR on EKS。Spark 作为 Pod 在现有 EKS 集群上运行;通过 IRSA 共享基础设施和 IAM 角色。
带窗口聚合和精确一次语义的状态流处理。
Kinesis Data Analytics for Apache Flink。托管 Flink 运行时;检查点到 S3;自动扩展。
在 Kinesis 流上进行轻量级逐记录转换(每个 <1 毫秒)。
Lambda 结合 KDS 上的事件源映射。调整 `BatchSize`、`MaximumBatchingWindowInSeconds` 和 `ParallelizationFactor`。
原因: 对于小的逐记录工作,Lambda 比 KCL/Glue Streaming 更便宜。
Step Functions 步骤偶尔因瞬时限流而失败;重试后发出警报。
添加 `Retry` 块,设置 `ErrorEquals: ["Lambda.ThrottlingException", "States.TaskFailed"]`、`IntervalSeconds`、`MaxAttempts`、`BackoffRate=2`。再加上 `Catch` 到一个通知状态。
通过 Lambda 转换并行处理 500,000 个 JSON 文件。
Step Functions 分布式 Map 状态,带 `MaxConcurrency` 和来自 S3 的 ItemReader。扇出到数千个并行 Lambda 调用。
具有跨服务依赖(Glue + Redshift COPY + Lambda + 电子邮件)和血缘要求的复杂 DAG。
Amazon MWAA (Managed Workflows for Apache Airflow)。AWS 服务的原生 Airflow 操作符;Git 驱动的 DAG 同步。
如果部署导致失败,需要回滚 DAG 更改。
将 DAG 存储在 S3 版本化存储桶中 + 通过 S3 版本控制同步。或者在 Git 中维护 DAG 仓库,每个分支一个环境 + 通过 CI 同步到 S3。
原始数据热存储 30 天,接下来的 90 天偶尔访问,归档 7 年。
S3 生命周期:0-30 天为 Standard,30 天后转换为 Standard-IA,120 天后转换为 Glacier Flexible Retrieval,7 年后过期。
访问模式不可预测;手动生命周期策略是错误的选择。
S3 Intelligent-Tiering。根据访问模式自动在频繁/不频繁/归档即时访问/归档/深度归档之间移动对象。有按对象监控费用;频繁/IA 中无检索费用。
Athena 查询数据湖速度慢;分区包含数千个 1-5 KB 的 JSON 文件。
通过 Glue/EMR 作业将小文件压缩成约 256 MB 的 Parquet 文件。对于托管表格式,使用 Iceberg `OPTIMIZE` 或 Hudi 压缩。
原因: Athena/Spark 处理微小文件时,每个文件的开销过大。理想大小是约 128-512 MB 的 Parquet 文件。
一个存储桶;多个团队需要不同的前缀范围访问模式。
S3 Access Points — 为每个团队命名端点,其策略绑定到前缀。比一个巨大的存储桶策略更简单。
不同的消费者需要同一 S3 对象的不同视图(经过编辑的 PII、摘要)。
S3 Object Lambda Access Point。GET 请求调用 Lambda,Lambda 实时转换对象;消费者看到转换后的视图。
需要在 S3 数据湖上实现 ACID 事务、模式演进和时间旅行。
Apache Iceberg 表(Glue Catalog + S3 存储)。原子提交、MERGE/UPDATE/DELETE、快照隔离、分区演进。
原因: Hive 风格的 S3 仅追加模式不支持行级更新。Iceberg/Hudi/Delta 解决了这个问题。
数据湖表上有多个写入者和读取者;需要事务一致性和行级访问控制。
Lake Formation 治理表(Iceberg 支持)与 LF-Tags 用于权限控制。
Athena、Redshift Spectrum、EMR 和 Glue ETL 都需要一个共享的元数据存储。
AWS Glue Data Catalog。由所有分析服务使用的单一 Hive 兼容元数据存储。
Redshift 集群需要独立于计算扩展存储。
RA3 节点与托管存储(RMS)。存储由 S3 支持;计算独立扩展。AQUA、并发扩展、联邦查询所需。
Redshift 查询经常按 `created_at` 过滤;全表扫描速度慢。
在 `created_at` 上定义排序键(或包含 `created_at` 的复合排序键)。Redshift 在扫描期间使用区域图跳过块。
在 `orders` 和 `order_items` 之间频繁进行连接;查询混洗导致速度慢。
在两个表上使用相同的 `DISTKEY` (`order_id`)。共置行避免了连接期间的网络混洗。
原因: KEY 分布将连接行共置在同一个计算节点上。
将 32 个 gzip CSV 文件(每个约 1 GB)加载到 4 节点 Redshift 集群中速度慢。
从单个清单并行 COPY。目标文件数 = 切片数(切片 = 节点 × vCPU)的倍数。4 个 ra3.xlplus 节点 = 8 个切片 → 32 个文件 = 每个切片 4 个文件。
将 S3 中 5 TB 的冷 Parquet 数据与热 Redshift 事实表进行连接;不想加载它。
Redshift Spectrum。Glue Catalog 中的外部表;查询直接使用 Redshift 计算读取 S3。
高峰期报告团队的查询会减慢 ETL 工作负载;两者在同一集群上运行。
在相关的 WLM 队列上启用并发扩展。Redshift 透明地将溢出查询路由到扩展的集群。
仪表板查询重复连接 3 个大表并进行聚合;延迟很高。
带有自动刷新的物化视图。Redshift 维护预计算结果;查询从物化数据中读取。
间歇性分析工作负载;预置集群处于空闲状态。
Amazon Redshift Serverless。按工作负载自动预置和扩展 RPU;按 RPU-小时付费。零操作。
需要在不进行 ETL 的情况下将 Redshift 数据与实时的 Aurora MySQL 数据连接。
Redshift 联邦查询。创建指向 Aurora 的 EXTERNAL SCHEMA;查询通过实时 RDS 连接下推谓词。
仪表板在每次渲染时连接订单 + 客户 + 产品;星型模式太慢。
去范式化为宽事实表或物化视图。BI 工作负载倾向于在写入时解决读取时连接。
S3 按 `year/month/day/hour` 分区;`MSCK REPAIR TABLE` 需要 30 分钟以上。
启用 Athena 分区投影(无需 Glue Catalog 分区条目)。在表属性中定义分区键类型 + 范围。
原因: Athena 在查询时根据投影规则计算分区位置 — 无需 MSCK,无 Glue API 限流。
在一次操作中将 Athena 查询结果转换为 Parquet,并进行分区。
CREATE TABLE AS SELECT (CTAS) 与 `format=PARQUET`,`partitioned_by=ARRAY['region']`,`external_location` 设置为目标 S3 前缀。
同一查询模板全天以不同参数值运行。
Athena 预处理语句:`PREPARE`,`EXECUTE` 带参数值。避免重新解析并提供清晰的参数化。
IoT 设备读数;需要 (1) 在时间窗口内设备的所有读数,(2) 每个设备的最新读数。
PK = `device_id`,SK = `timestamp`。GSI 采用 PK = `device_id`,SK = 倒序 `timestamp`(或使用 Query with `ScanIndexForward=false LIMIT 1`)。
会话表无限制增长;旧会话可在 7 天后删除。
在 `expires_at` epoch 属性上启用 DynamoDB TTL。DynamoDB 会免费移除过期项目(约 48 小时内)。
IoT 传感器数据:最近 7 天的热查询,2 年内的偶尔查询。
Amazon Timestream。内存存储用于最新数据(快速查询);自动分层到磁性存储用于历史数据。
兼容 Cassandra 的高写入时序存储,具有 90 天保留期。
Amazon Keyspaces 带有行级 TTL。兼容 Cassandra CQL;无服务器容量,无需集群管理。
OpenSearch 存储成本增长;旧索引很少被查询。
OpenSearch ISM 策略分层数据:热数据 → UltraWarm(S3 支持)→ 冷数据。冷层分离但可按需搜索。
在下游消费之前,验证 ETL 输出具有 ≥1,000 行且列空值率 <2%。
AWS Glue Data Quality 规则 (DQDL):`RowCount >= 1000`,`Completeness "col" > 0.98`。规则失败时管道停止。
在 EMR 上使用自定义基于 Spark 的数据质量框架;需要列级统计检查。
Spark 上的 AWS Deequ 库。定义约束(`isComplete`,`hasMin`,`isContainedIn`);Deequ 作为 Spark 作业运行并发出指标。
分析师需要跨账户发现、请求访问并了解数据产品的血缘关系。
Amazon DataZone。带有业务术语表、访问工作流、血缘关系的数据目录;涵盖 Lake Formation、Redshift、RDS。
Lambda 发出逐记录处理指标;CloudWatch PutMetricData 成本很高。
CloudWatch Embedded Metric Format (EMF)。以 EMF 模式记录 JSON;CloudWatch 从日志中提取指标,无需额外的 PutMetricData 成本。
查找过去 7 天内持续时间超过 1 小时的所有 Glue 作业。
CloudWatch Logs Insights 查询:`fields @timestamp, @message | filter @message like /JobRunDuration/ | parse @message "duration=*" as d | filter d > 3600`。
Glue 作业缓慢;需要了解它是否资源不足或存在倾斜混洗。
启用 Glue 作业指标 + 可观察性。CloudWatch 显示最大 DPU 使用量、执行器利用率、每个阶段的混洗读/写。
Glue Spark 作业的大小在不同运行中差异高达 10 倍;对小输入过量配置。
启用 Glue 自动扩展(Glue 3.0+)。工作器在执行期间根据阶段并行性进行添加/移除。
Athena 扫描 5 TB 数据来回答只涉及一天数据的查询;成本太高。
按日期分区并确保 WHERE 子句使用分区键。通过 `EXPLAIN` 显示分区剪枝进行验证。
Athena 对 JSON 数据湖的查询速度慢且成本高昂。
转换为 Parquet(列式)或 ORC。只读取所需列;原生压缩降低扫描成本和时间。
EMR 集群成本优化,无数据丢失风险。
核心节点使用按需实例(托管 HDFS / 混洗)。任务节点通过实例群组使用 Spot 实例,并采用多样化的实例类型。
Redshift 集群 24/7 运行;按需定价昂贵。
Redshift 预留节点(1 年或 3 年,全部/部分/无预付)。对于稳定工作负载,相比按需可享受高达约 75% 的折扣。
针对每天 500 GB / 50 次查询,在 Athena、Redshift 和 EMR 之间进行选择。
即席的、不频繁的 → Athena(按 TB 扫描计费)。可预测的 BI 仪表板 → Redshift(RA3 + 预留)。重型定制 Spark → EMR。
原因: Athena 按扫描数据量计费;Redshift 按集群小时计费;EMR 按实例小时计费。将计费方式与访问模式匹配。
Glue 作业多次并发触发;希望每次只运行一次。
设置 Glue 作业 `MaxConcurrentRuns=1`。后续触发将等待;消除并发状态损坏。
Glue ETL 重试在 S3 目标中生成重复的输出行。
幂等性:每次运行写入一个临时前缀,然后通过 S3 分段 `CompleteMultipartUpload` 进行原子重命名,或使用 Iceberg/Hudi MERGE 进行 upsert。
错误的 ETL 运行将损坏的行写入 Aurora MySQL;恢复到几分钟前的某个时间点。
Aurora Backtrack(仅限 MySQL 兼容)。将集群回溯到目标时间,而无需从快照恢复。
管道用损坏的数据覆盖了正确的 S3 对象。
S3 存储桶版本控制 + 恢复到先前版本。结合 MFA Delete 以防止意外版本过期。
自动化 EBS 快照的创建、保留和跨区域复制,以实现灾难恢复。
Amazon Data Lifecycle Manager (DLM) 结合按标签策略:计划、保留、跨区域复制。
MSK 消费者落后于生产者;需要检测并发出警报。
每个消费者组的 CloudWatch 指标 `MaxOffsetLag`。当 > 阈值时报警;扩展消费者数量或增加分区并行度。
Kinesis 消费者滞后;需要检测。
CloudWatch 指标 `GetRecords.IteratorAgeMilliseconds`。警报 > 60 秒通常表示消费者配置不足。
识别过去一小时内最慢的 Redshift 查询以进行调优。
查询 `SVL_QLOG` / `STL_QUERY` / `SYS_QUERY_HISTORY` 以获取耗时最长的条目;使用 `SVL_QUERY_REPORT` 获取每个步骤的详细分析。
销售团队应只能在共享数据湖中看到其指定区域的行。
Lake Formation 行级安全性通过数据过滤器实现:每个 IAM 主体的 `region IN ('NA', 'EU')`。单表;按主体过滤视图。
医疗保健表 — 分析师不得查看 SSN 和诊断列。
Lake Formation 列级权限:GRANT SELECT on table EXCEPT (`ssn`, `diagnosis_code`)。
许多团队 + 许多表;按表授予权限难以维护。
Lake Formation LF-Tags。标记表/列;向主体授予基于标签的权限。添加新表只需正确的标签。
账户 A 拥有数据湖;账户 B 的分析师需要对特定表进行读取访问。
Lake Formation 通过 RAM 进行跨账户共享。账户 A 向 B 的 IAM 主体/账户授予权限;B 通过 Athena/Redshift Spectrum 访问。
Redshift 内部的行级安全性(非 Lake Formation)。
Redshift 原生 RLS 策略:`CREATE RLS POLICY`,谓词引用会话上下文(`current_user`,`session_role`)。将策略附加到表。
合规性要求 Redshift 加密使用客户管理密钥并带有审计跟踪。
Redshift 集群使用客户管理的 KMS 密钥进行加密。启用密钥轮换;CloudTrail 捕获对 CMK 的每次解密操作。
使用公司管理的密钥加密 Glue ETL 作业的输入/输出。
Glue 安全配置,带有用于 S3 + CloudWatch Logs + 作业书签的 CMK。Glue 角色被授予密钥的 `kms:Decrypt`/`Encrypt` 权限。
发现和分类 S3 数据湖中的 PII(姓名、SSN、电子邮件)。
Amazon Macie。S3 上由机器学习驱动的敏感数据发现;生成包含对象位置和 PII 类型的发现结果。
审计数据湖存储桶中的每个 S3 GetObject / PutObject 操作。
存储桶的 CloudTrail 数据事件。CloudTrail 默认只记录管理事件;数据事件必须显式启用。
原因: 数据事件按事件计费;仅限于敏感存储桶以控制成本。
需要每个 S3 访问的访问者/时间/IP;CloudTrail 数据事件太昂贵。
S3 服务器访问日志。免费;日志交付到单独的日志存储桶;细节少于 CloudTrail 但涵盖请求者 + IP + 路径。
防止账户中的任何存储桶意外公开,即使存储桶策略允许。
S3 账户级别阻止公共访问。覆盖任何存储桶级别的策略;作为护栏强制执行。
VPC 中的 Redshift 必须从 S3 读取,而无需通过公共互联网。
Redshift 子网路由表中的 S3 Gateway Endpoint。流量通过 AWS 骨干网络路由;无 NAT,无 IGW。
Glue ETL 作业需要访问私有子网中的 RDS 并调用 Glue Data Catalog API。
RDS VPC 上的 Glue 连接 + `glue.amazonaws.com` 的接口 VPC 端点 + S3 Gateway Endpoint。
Glue ETL 需要 S3 读取、Redshift 写入、Secrets Manager 读取权限。
具有最小权限策略的单一 Glue 执行角色:源前缀上的 `s3:GetObject`,`redshift-data:ExecuteStatement`,特定 Secret ARN 上的 `secretsmanager:GetSecretValue`。
检测异常数据访问模式 — IAM 用户大量下载,此前无数据湖访问权限。
GuardDuty S3 保护。基于每个 IAM 主体的行为基线;发现异常访问量/模式。
合规性要求金融数据具有 7 年的 WORM(一次写入,多次读取)保留期。
S3 对象锁定,采用合规模式 + 7 年保留期。即使是根用户也无法删除;符合 SEC 17a-4 / FINRA。
为 HIPAA / SOC 2 审计持续收集合规性证据。
AWS Audit Manager 结合预构建框架。自动从 CloudTrail、Config、Security Hub 收集证据;生成可用于审计的报告。