View a markdown version of this page

数据交付的最佳实践 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

数据交付的最佳实践

以下最佳实践可帮助您充分利用 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),以监控吞吐量并识别数据量的意外下降。