View a markdown version of this page

亚马逊 S3 交付的工作原理 - Amazon Kinesis Data Streams

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

亚马逊 S3 交付的工作原理

使用本主题了解 Amazon S3 交付如何将记录从 Amazon Kinesis 数据流发送到通用亚马逊简单存储服务存储桶,包括存储配置、压缩、存储类别、记录格式和加密。

配送的工作原理

Amazon S3 交付通过以下步骤将记录发送到通用的 Amazon S3 存储桶:

  1. 读取 — 交付从 Kinesis 数据流中的所有分片中读取记录。

  2. 缓冲区 — 对记录进行缓冲,直到达到数据新鲜度间隔。

  3. 验证 — 当记录格式为时STRING,每条记录都被验证为有效 UTF-8 字符串;当记录格式为时JSON,每条记录都被验证为有效的 JSON 负载。验证失败的记录将发送到死信队列。

  4. 压缩和格式化 — 根据配置的输出格式对记录进行格式化,并使用指定的压缩算法进行压缩。

  5. 交付 — 使用配置的密钥模板将生成的对象写入目标 Amazon S3 存储桶。

  6. Dead-letter 队列 — 验证失败的记录将写入带有错误上下文的死信队列。

存储配置

创建 Amazon S3 交付时,您需要指定以下存储配置:

  • bucketARN — 目标 Amazon S3 存储桶的 ARN。

  • ExpectedBucketOwner— 目标存储桶的预期所有者的 12 位 AWS 账户 ID。此值为必填值,有助于防止在所有权发生变化时传送到意外存储桶。

  • CompressionType— 应用于交付对象的压缩类型。此值为必填值;指定NONE在不压缩的情况下交付对象。请参阅压缩选项。

  • StorageClass— 已交付对象的 Amazon S3 存储类别(可选)。请参阅存储类。

  • OutputKeyTemplate— 用于构造 Amazon S3 对象密钥的模板(可选)。请参阅用于 Amazon S3 交付的 S3 输出密钥模板。

压缩选项

您必须指定压缩类型才能传输到通用 Amazon S3 存储桶。要在不压缩的情况下交付对象,请选择NONE。选择以下压缩类型之一:

  • GZIP — 标准的 gzip 压缩。压缩比和速度的良好平衡。

  • ZSTD — Z 标准压缩。更高的压缩比和更快的解压速度。

  • 无 — 未应用压缩。记录未经压缩传送。

存储类

您可以选择为交付的对象指定 Amazon S3 存储类别。如果未指定,则默认存储类别为标准。支持的存储类别:

  • 标准 — 用于存放经常访问数据的通用存储。

  • INTELLIGENT_TIERING — 根据使用模式自动在接入层之间移动数据。

  • GLACIER_IR — 低成本存储,用于存储需要立即检索的数据。

有关 Amazon S3 存储类的更多信息,请参阅 A mazon S3 用户指南中的了解和管理存储类别。

输出键模板

您可以配置输出密钥模板来控制已交付文件的 Amazon S3 对象密钥结构。该模板支持日期、时间和交付元数据的动态占位符,用于在目标存储桶中组织数据。有关默认模板、支持的变量和示例,请参阅用于 Amazon S3 交付的 S3 输出密钥模板。

数据新鲜度

数据新鲜度定义了传送记录之前的最大缓冲时间。您可以在 300 到 900 秒(5 到 15 分钟)之间配置此值。默认值为 300 秒。值越低,交付速度越快,而值越高生成的对象越少、越大。

Dead-letter 队列

死信队列是可选的,可以传送到通用的 Amazon S3 存储桶。如果您未指定死信队列配置,则传送会默认将错误信息写入带有错误前缀的同一个目标存储桶。

如果您指定死信队列,则需要提供以下内容:

  • bucketARN — Amazon S3 存储桶的 ARN,用于接收有关无法传送的记录的信息。

  • ExpectedBucketOwner— 死信队列存储桶的预期所有者的 12 位 AWS 账户 ID(指定死信队列时为必填项)。

  • ErrorOutputPrefix— 用于在存储桶内组织故障元数据对象的可选前缀。

录制格式

Amazon S3 交付支持以下记录格式以传输到通用亚马逊 S3 存储桶:

  • JSON — 纯的 JSON 记录。

  • STRIN UTF-8 G — 字符串记录。

  • BYTE_ARRAY — 原始二进制记录。

注意

不支持将GSR_JSON记录格式传输到通用 Amazon S3 存储桶。它仅支持传送到需要 AWS Glue 架构注册表的 Apache Iceberg 上的流媒体表。

Cross-account 交货

亚马逊 S3 交付支持跨账户传输到通用亚马逊 S3 存储桶。源流和目标存储桶必须在同一个存储桶中 AWS 区域。配置目标存储桶策略以授予交付 IAM 角色写入对象的权限。

加密

Amazon S3 交付支持使用客户管理的 AWS KMS 密钥对交付到通用的 Amazon S3 存储桶的对象进行服务器端加密。您可以指定客户管理的 AWS KMS 密钥来加密交付的对象。

重要

您不能使用aws/kinesis AWS KMS 别名进行目标加密。您必须使用客户管理的 AWS KMS 密钥。

如果您的源 Kinesis 数据流已加密,则需要考虑其他注意事项。不支持使用 AWS 托管式密钥 (aws/kinesis别名)加密的流,服务执行角色需要 AWS KMS 权限才能解密源记录。有关源流加密要求,请参阅源流加密。有关服务执行角色所需的 AWS KMS 权限,请参阅数据传输的 IAM 权限。