本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数据交付的最佳实践
以下最佳实践可帮助您充分利用 Amazon Kinesis Data Streams 中的数据交付。有关这些建议中提及的配送指标的完整列表,请参阅监控数据交付。
吞吐量和数据新鲜度
调整传送频率并观察传送延迟,以便您的输出文件大小和数据新鲜度与您的工作负载相匹配:
-
根据您的直播吞吐量设置
DataFreshnessInSeconds参数。较低的值会增加传送频率,但可能会导致输出文件变小。值越高,每个交付周期可以累积更多的数据。 -
根据该
DataFreshness指标创建 Amazon CloudWatch 警报,以检测交付延迟何时超过可接受的阈值。 -
您可以从同一 Kinesis Data Streams 流创建多个交付。每次交付都是独立运行的,允许您同时将数据传送到多个目的地。
架构管理(Apache Iceberg 上的流式传输表)
由于流式传输表交付绑定到固定架构且不支持架构演变,因此请谨慎管理架构以避免交付失败:
-
创建交付之前,请在 Amazon Glue 架构注册表中注册您的架构。交付使用注册的架构来定义目标表结构。
-
交付不支持架构演变。如果您的架构发生变化,则必须删除并使用更新的架构重新创建交付。
-
在将所有记录写入流之前,请使用生产者端架构验证来确保所有记录都符合注册的架构。这样可以最大限度地减少记录传送失败。
S3 对象布局(通用亚马逊 S3 存储桶)
对交付的对象进行布局以提高下游查询性能并控制存储成本:
-
选择与下游使用者的查询模式相匹配的输出密钥模板。例如,如果您的查询经常按时间范围进行筛选,请使用基于日期的前缀。
-
启用 GZIP 或 ZSTD 压缩以降低存储成本并提高下游分析工作负载的读取性能。
-
根据您的数据访问模式选择相应的 Amazon S3 存储类别。对于经常访问的数据,使用 STANDARD,使用 INTELLIGENT_TIERING 让 Amazon S3 在访问层之间自动移动对象,或者使用 GLACIER_IR 来处理仍然需要毫秒检索的很少访问的数据。
安全性
通过最低权限访问、加密和审核来保护您的交付数据和凭证:
-
将您的 IAM 策略范围限定为交付写入的特定存储桶或表。避免使用通配符资源 ARN。
-
在交付使用的 IAM 角色的信任策略中包含
aws:SourceArn和aws:SourceAccount条件密钥。这样可以确保只有您的特定交付人员才能担任该角色,从而防止混乱的副手问题。 -
启用 Amazon CloudTrail 日志记录以审核所有交付 API 调用和配置更改。
-
对敏感数据使用客户管理的 Amazon KMS 密钥。这使您可以完全控制密钥轮换、访问策略和审计跟踪。
Dead-letter 队列
通过配置和监控死信队列来捕获和诊断无法传送的记录:
-
请务必为配送配置死信队列。无法传送到目的地的记录将发送到死信队列以供日后检查。
-
监控中的
DLQDeliverySuccess指标(DeliveryToS3.DLQDeliverySuccess或DeliveryToIceberg.DLQDeliverySuccess) CloudWatch ,以检测何时将记录路由到死信队列。 -
定期检查死信队列条目,以确定交付失败的模式,并在生产者或交付配置级别采取纠正措施。
监控
通过对关键 CloudWatch 指标发出警报并启用交付日志,尽早发现交付问题:
-
针对交付
DataFreshness和失败记录指标创建 CloudWatch 警报(DeliveryToS3.FailedRecordCount或DeliveryToIceberg.FailedRowCount),以主动检测交付问题。 -
启用交付 CloudWatch 日志,以捕获详细的交付诊断和错误消息。
-
跟踪已交付字节指标(
DeliveryToS3.BytesOut或DeliveryToIceberg.BytesOut),以监控吞吐量并识别数据量的意外下降。