本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Kinesis 数据流的流式传输表和 S3 交付
借助亚马逊 Kinesis 数据流,您可以将来自 Kinesis 数据流的流数据传输到两种目标类型:Apache Iceberg 上的流式传输表(亚马逊 S3 表)或通用亚马逊 S3 存储桶。您无需管理任何基础架构,几分钟之内即可开始交付。Amazon Kinesis 数据流从您的数据流中读取、缓冲和聚合记录,并将它们传送到您配置的目的地。交付是完全管理的 — 无需预置连接器、消费类应用程序或计算资源。
在 On-Demand 优势或 On-Demand 标准容量模式下运行的直播支持这些功能。您可以配置直播中的传送并指定目的地。然后,Amazon Kinesis 数据流会自动处理扩展、重试和交付可靠性。交付不会消耗您的直播的读取吞吐量,也不会对现有消费者产生任何影响。
数据交付的工作原理
数据交付通过托管管道将您的 Kinesis 数据流连接到交付目的地:
您可以在 On-Demand 模式下将数据发布到 Kinesis 数据流。
你调用
CreateChannel直播并指定目的地(Apache Iceberg 上的流媒体表或通用的 Amazon S3 存储桶)。该交付从流中读取,缓冲记录,并将它们聚合到最佳大小的文件中。
交付将在您指定的数据新鲜度窗口内将文件写入您配置的目的地。
送货目的地
数据传输支持两种目标类型:
- Apache Iceberg 上的直播表
-
流式传输表会持续将您的 Kinesis 数据流传输到存储在 Amazon S3 表中的 Apache Iceberg 表中。当数据到达时,它会自动转换为经过优化的Apache Parquet格式,并具有智能内联压缩功能,从而消除了小文件问题并降低了下游查询成本。在数据发布到您的直播后的几分钟内,即可通过亚马逊雅典娜、亚马逊 EMR、适用于 Apache Flink 的亚马逊托管服务或任何支持 Apache Iceberg 的引擎进行查询。
- 通用亚马逊 S3 存储桶
-
Amazon S3 交付将流数据从 Kinesis 数据流直接写入 S3 存储桶。记录以其原始源格式交付,不进行任何转换。多个记录被缓冲并批处理成大小最佳的对象,压缩方式可配置,并通过输出密钥模板定义一个 S3 密钥结构。这非常适合原始日志存档、事件重放和下游批处理等用例,在这些用例中,您需要对流数据进行持久、低成本的存储,而无需管理交付管道的开销。
数据流
下图显示了在 Apache Iceberg 上传送到流媒体表的端到端数据流。该图以信用卡交易用例为例。生产者根据架构注册表中的 AWS Glue 架构对记录进行序列化,并将其写入到 Kinesis 数据流中。亚马逊 Kinesis Data Streams 将记录传输到亚马逊 S3 表上的 Apache Iceberg 表。如果您在 S3 表中启用分析集成,则表元数据也会注册到 AWS Glue 数据目录中;默认情况下不会发生这种情况。然后,交付的数据及其元数据可供亚马逊雅典娜、亚马逊 Redshift 和亚马逊 EMR 等分析和人工智能引擎使用。
向通用的 Amazon S3 存储桶交付遵循类似的流程,但有两个区别。创建者将记录写入到 Kinesis 数据流,然后 Amazon Kinesis 数据流将它们传送到您的 S3 存储桶。记录以其原始源格式交付,无需转换,因此不需要 AWS Glue 架构注册表,也不会在 AWS Glue 数据目录中注册表元数据。Amazon Kinesis Data Streams 将记录缓冲和批处理成大小最佳的对象,并使用您在输出密钥模板中定义的 S3 密钥结构写入它们。然后,交付的对象可用于下游批处理和分析。
关键功能
无服务器自动扩展 -根据您的流吞吐量自动扩展,最高可扩展到流的吞吐容量。没有可预置的计算资源。
Exactly-once 每个分片的交付 — 分片中的记录只能传送到目的地一次,分区内没有重复或遗漏。
近乎实时的交付 — 可配置的数据新鲜度从 5 到 15 分钟(300 到 900 秒)。
自动转换 Parquet — 对于 Apache Iceberg 上的直播表,将流媒体记录转换为经过优化的 Apache Parquet 格式,以实现高效的分析查询。
行内压缩 -将记录聚合到大小最佳的文件中,以提高分析查询性能。
加密 — 支持客户管理的 AWS KMS 密钥在目的地进行服务器端加密。 AWS 托管式密钥 (
aws/kinesis别名)不支持目标加密。Dead-letter 队列 — 无法传送的记录(包括流 ARN、分区 ID、序列号和错误上下文)的故障元数据写入 S3-based 死信队列。
CloudWatch 指标和日志 — 通过亚马逊 CloudWatch 指标监控传输的字节数、记录数量和数据新鲜度。启用向 Amazon Logs 的交付 CloudWatch 日志记录,以捕获交付批次详情、故障和错误上下文以进行故障排除。
对其他消费者没有影响 -不消耗增强的扇出插槽或共享吞吐量。
要求
您的 Kinesis 数据流必须使用 On-Demand 标准或 On-Demand 优势容量模式。
您必须创建一个 IAM 服务执行角色来授予向目的地写入的交付权限。
您的目标存储桶或表存储桶必须与您的 Kinesis 数据流位于同一区域。数据传输不支持任何一种目标类型的跨区域交付。
对于 Apache Iceberg 上的直播表,不支持跨账户交付。源流、目标 S3 表存储桶和 AWS Glue 架构注册表都必须位于相同 AWS 账户 且相同的区域。
对于一般用途 Amazon S3 存储桶,仅目标存储桶支持跨账户传输。该频道及其源流必须位于同一账户中 AWS 账户;只有目标存储桶可以位于不同的账户中。
对于 Apache Iceberg 上的直播表,您必须在 Amazon S3 中配置死信队列。