View a markdown version of this page

Amazon Kinesis 数据流的流式传输表和 S3 交付 - Amazon Kinesis Data Streams

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

Amazon Kinesis 数据流的流式传输表和 S3 交付

借助亚马逊 Kinesis 数据流,您可以将来自 Kinesis 数据流的流数据传输到两种目标类型:Apache Iceberg 上的流式传输表(亚马逊 S3 表)或通用亚马逊 S3 存储桶。您无需管理任何基础架构,几分钟之内即可开始交付。Amazon Kinesis 数据流从您的数据流中读取、缓冲和聚合记录,并将它们传送到您配置的目的地。交付是完全管理的 — 无需预置连接器、消费类应用程序或计算资源。

在 On-Demand 优势或 On-Demand 标准容量模式下运行的直播支持这些功能。您可以配置直播中的传送并指定目的地。然后,Amazon Kinesis 数据流会自动处理扩展、重试和交付可靠性。交付不会消耗您的直播的读取吞吐量,也不会对现有消费者产生任何影响。

数据交付的工作原理

数据交付通过托管管道将您的 Kinesis 数据流连接到交付目的地:

  1. 您可以在 On-Demand 模式下将数据发布到 Kinesis 数据流。

  2. 你调用CreateChannel直播并指定目的地(Apache Iceberg 上的流媒体表或通用的 Amazon S3 存储桶)。

  3. 该交付从流中读取,缓冲记录,并将它们聚合到最佳大小的文件中。

  4. 交付将在您指定的数据新鲜度窗口内将文件写入您配置的目的地。

送货目的地

数据传输支持两种目标类型:

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 密钥结构写入它们。然后,交付的对象可用于下游批处理和分析。

架构图显示了通过架 AWS Glue 构注册表序列化为Kinesis数据流的卡交易记录,通过数据目录中注册的元 AWS Glue 数据传送到亚马逊S3表上的Apache Iceberg表,并由包括亚马逊雅典娜、亚马逊Redshift和亚马逊EMR在内的分析和人工智能引擎使用。

关键功能

  • 无服务器自动扩展 -根据您的流吞吐量自动扩展,最高可扩展到流的吞吐容量。没有可预置的计算资源。

  • 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 中配置死信队列。