

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数据交付的最佳实践
<a name="data-delivery-best-practices"></a>

 以下最佳实践可帮助您充分利用 Amazon Kinesis 数据流中的数据交付。有关这些建议中提及的交付指标的完整列表，请参阅[监控数据交付](data-delivery-monitoring.md)。

## 吞吐量和数据新鲜度
<a name="best-practices-throughput"></a>
+  根据您的流媒体吞吐量设置`DataFreshnessInSeconds`参数。较低的值会增加传送频率，但可能会导致输出文件变小。值越高，允许在每个交付周期中累积更多的数据。
+  针对该`DataFreshness`指标创建亚马逊 CloudWatch 警报，以检测交付延迟何时超过您的可接受阈值。
+  您可以从同一 Kinesis 数据流中创建多个交付。每次交付都独立运行，允许您同时将数据传送到多个目的地。

## 架构管理（Apache Iceberg 上的直播表）
<a name="best-practices-schema"></a>
+  在创建交付之前，请在 AWS Glue 架构注册表中注册您的架构。交付使用注册的架构来定义目标表结构。
+  交付不支持架构演变。如果您的架构发生变化，则必须删除并使用更新后的架构重新创建交付。
+  使用生产者端架构验证来确保所有记录在写入流之前都符合注册的架构。这样可以最大限度地减少记录传送失败的情况。

## S3 对象布局（通用 Amazon S3 存储桶）
<a name="best-practices-s3-layout"></a>
+  选择与下游使用者的查询模式相匹配的输出密钥模板。例如，如果您的查询经常按时间范围过滤，则使用基于日期的前缀。
+  启用 GZIP 或 ZSTD 压缩以降低存储成本并提高下游分析工作负载的读取性能。
+  根据您的数据访问模式选择适当的 Amazon S3 存储类别。对于经常访问的数据，使用 STANDARD，使用 INTELLIGENT\_TIERING 让 Amazon S3 在访问层之间自动移动对象，或使用 GLACIER\_IR 来处理仍需要毫秒检索的极少访问的数据。

## 安全性
<a name="best-practices-security"></a>
+  将您的 IAM 政策范围限定为交付写入的特定存储桶或表。避免使用通配符资源 ARN。
+  在交付所使用的 IAM 角色的信任策略中包括`aws:SourceArn`和`aws:SourceAccount`条件密钥。这样可以确保只有您的特定交付人员才能担任该角色，从而防止出现混乱的副手问题。
+  启用 AWS CloudTrail 日志记录以审核所有交付 API 调用和配置更改。
+  使用客户管理的 AWS KMS 密钥存储敏感数据。这使您可以完全控制密钥轮换、访问策略和审计跟踪。

## Dead-letter 队列
<a name="best-practices-dlq"></a>
+  务必为您的交付配置死信队列。无法传送到目的地的记录将发送到死信队列以供日后检查。
+  监控`DLQDeliverySuccess`指标（`DeliveryToS3.DLQDeliverySuccess`或`DeliveryToIceberg.DLQDeliverySuccess`） CloudWatch 以检测记录何时被路由到死信队列。
+  定期检查死信队列条目，以确定交付失败的模式，并在生产者或交付配置级别采取纠正措施。

## 监控
<a name="best-practices-monitoring"></a>
+  针对交付`DataFreshness`和失败记录指标（`DeliveryToS3.FailedRecordCount`或`DeliveryToIceberg.FailedRowCount`）创建 CloudWatch 警报，以主动检测交付问题。
+  为您的交付启用 CloudWatch 日志，以捕获详细的交付诊断和错误消息。
+  跟踪交付字节指标（`DeliveryToS3.BytesOut`或`DeliveryToIceberg.BytesOut`）以监控吞吐量并识别数据量的意外下降。