View a markdown version of this page

亚马逊 S3 交付的工作原理 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

亚马逊 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 位 Amazon Web Services 账户 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 位 Amazon Web Services 账户 ID(指定死信队列时为必填项)。

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

录制格式

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

  • JSON — 纯的 JSON 记录。

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

  • BYTE_ARRAY — 原始二进制记录。

注意

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

Cross-account 交货

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

加密

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

重要

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

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