View a markdown version of this page

处理大型记录 - Amazon Kinesis Data Streams

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

处理大型记录

亚马逊 Kinesis Data Streams 支持高达 10 兆字节 () 的记录。MiBs建议使用此功能来处理超过 1 MiB 默认记录大小限制的间歇性数据有效载荷。现有和新建流的默认最大记录大小设置为 1 MiB。

该功能有利于物联网(IoT)应用程序、更改数据捕获(CDC)管道以及偶尔需要处理较大数据有效载荷的机器学习工作流程。要开始在流中使用大型记录,请更新流的最大记录大小限制。

重要

写入的单个分片吞吐量限制 MB/s 为 1,读取的吞吐量限制 MB/s 为 2,支持更大的记录大小,因此保持不变。Kinesis Data Streams 旨在容纳间歇性的大型记录,以及小于或等于 1 MiB 的记录基准流量。但并非为适应持续的大容量大型记录摄取而设计。

大型记录的工作原理

亚马逊 Kinesis 数据流接受大小不超过 10 MiB 的记录。您的数据流通过暂时突增超过其持续写入吞吐量来容纳大型记录,然后随着时间的推移恢复到基准速率。这种突发容量会持续补充,因此您的直播可以在处理正常流量的同时处理间歇性的大型记录,而无需进行任何手动容量调整。

要想可视化这种行为,可以将直播的写入容量想象成一个以稳定速度重新填充的容量。当您发送大型唱片(例如 10 MiB 唱片)时,坦克会暂时耗尽。然后,它会立即开始重新填充,这意味着当容量可用时,您可以继续发送较小的记录。

容量的补充速度取决于以下几个因素:

  • 大型记录的大小

  • 基线记录的大小

  • 直播中的整体流量模式

  • 你选择的分区键策略

为获得最佳结果,请使用均匀分布的分区键将大型记录分布在流的可用容量中。

在按需模式下,Kinesis 数据流会自动管理容量。您的直播会根据您的流量模式向上和向下扩展其吞吐量,并且可以透明地处理创纪录的突发容量。您无需预置或管理容量即可使用大型记录。有关按需模式如何扩展的更多信息,请参阅On-demand 模式功能和用例。

更新您的流以使用大型记录

使用 Kinesis Data Streams 处理较大记录
  1. 导航到 Kinesis Data Streams 控制台。

  2. 选择您的流,然后前往配置选项卡。

  3. 单击最大记录大小旁边的编辑。

  4. 设置最大记录大小(最大值为 10 MiB)。

  5. 保存更改。

此设置仅调整该 Kinesis 数据流的最大记录大小。在添加该限制之前,请验证所有下游应用程序是否能处理较大的记录。

您也可以使用 AWS CLI 更新此设置:

aws kinesis update-max-record-size \ --stream-arn \ --max-record-size-in-ki-b 5000

使用大型记录优化流性能

大型唱片专为间歇性使用而设计。为获得最佳效果,请将大型记录保持在总流量的2%以下。由于数据流会暂时超过其持续吞吐量以提供大量记录,因此过于频繁地发送大型记录会减少可用于基准流量的容量。有关使用大型记录优化直播性能的更多信息,请参阅限制和最佳性能的最佳实践。

使用大型记录缓解限制

由于大型记录会暂时消耗突发容量,因此您的数据流可能会限制后续写入,直到容量得到补充。以下步骤有助于减少节流:

缓解限制
  1. 在创建者应用程序中实现带有指数级退避的重试逻辑。

  2. 使用随机分区键在流的可用容量上分配大型记录。

  3. 对于连续的大型记录流,将有效载荷存储在 Amazon S3 中,仅向流发送元数据引用。有关更多信息,请参阅使用 Amazon Kinesis Data Streams 处理大型记录。

使用 Kinesis Data Streams API 处理大型记录

大型记录支持引入了一个新的 API,并更新了两个现有的控制平面 API,以处理最多 10 个记录 MiBs。

用于修改记录大小的 API:

  • UpdateMaxRecordSize:将现有流的最大记录大小限制配置为 10 MiBs。

更新现有 API:

  • CreateStream:添加可选 MaxRecordSizeInKiB 参数,用于在创建流期间设置记录大小限制。

  • DescribeStreamSummary:返回 MaxRecordSizeInKiB 字段显示当前的流配置。

所有列出的 API 都保留了对现有流的向后兼容性。有关完整的 API 文档,请参阅 Amazon Kinesis Data Streams 服务 API 参考。

AWS 与大型记录兼容的组件

以下 AWS 组件与大型记录兼容:

组件 说明

AWS SDK

AWS SDK 支持处理大型记录。您可以使用软件开发工具包中的可用方法,将直播的最大记录大小更新为 10 MiB。 AWS 有关更多信息,请参阅将此服务与 AWS SDK 一起使用。

Kinesis Consuer Library(KCL)

KCL 从 2.x 版开始支持处理大型记录。要使用大型录制支持,请更新流的 maxRecordSize 并使用 KCL。有关更多信息,请参阅使用 Kinesis Client Library 。

Kinesis Producer Library(KPL)

KPL 从 1.0.5 版开始支持处理大型记录。要使用大型录制支持,请更新流的 maxRecordSize 并使用 KPL。有关更多信息,请参阅使用 Amazon Kinesis Producer Library(KPL)开发产生器。

Amazon EMR

搭载 Apache Spark 的 Amazon EMR 支持处理不超过 Kinesis 数据流限制 (10 MiBs) 的大型记录。要使用大型记录支持,请使用 readStream 函数。有关更多信息,请参阅 Amazon EMR 与 Amazon Kinesis 集成。

Amazon Data Firehose

与 Kinesis Data Streams 一起使用时,Amazon Data Firehose 处理大型记录的行为取决于传输目的地:

  • Amazon S3:支持传输大型记录,无需任何额外配置。当使用数据格式转换时,Firehose 支持传输大型记录。当使用动态分区时,Firehose 不支持传输大型记录。

  • Lambda:当 Firehose 在下游触发 Lambda 函数时,我们不建议将其与大型记录一起使用。这可能会导致间歇性故障。

  • HTTP:Firehose 不支持传输大型记录。

  • Snowflake:Firehose 不支持传输大型记录。

  • Amazon Redshift:Firehose 不支持传输大型记录。

对于需要向 Snowflake 或 Redshift 传输大型记录的应用程序,请先将数据传输至 Amazon S3。然后使用提取、转换、加载(ETL)过程来加载数据。对于其他所有目的地,请在概念验证环境中使用大型记录测试行为之后,再扩展到生产使用量。大型记录的处理因目的地而不同。

AWS Lambda

AWS Lambda 最多支持 6 个 MiBs有效载荷。此限制适用于转换为 base-64 编码的 Kinesis 有效载荷,以及与事件源映射(ESM)有关的元数据。对于小于 6 的记录 MiBs,Lambda 使用 ESM 进行处理,无需额外配置。对于大于 6 的记录 MiBs,Lambda 使用故障时目的地进行处理。必须使用 ESM 配置失败时的目标,才能处理超出 Lambda 处理限制的记录。发送到失败时的目标的各个事件都是一个 JSON 文档,其中包含有关调用失败的元数据。

无论记录大小如何,都建议在 ESM 中创建一个失败时的目标。这可以确保不会丢弃任何记录。有关更多信息,请参阅配置调用失败时的目标。

Amazon Redshift

将数据从 Kinesis Data Streams 流式传输到亚马逊 Redshift 时,请检查亚马逊 Redshift 支持的最大记录大小。有关详细信息,请参阅《亚马逊 Redshift 数据库开发人员指南》中的 “从亚马逊 Kinesis 数据流中提取流媒体入门”。超过此限制的记录不予处理。有关未处理记录的日志记录信息的详细信息,请参阅《亚马逊 Redshift 数据库开发者指南》中的 SYS_STREAM_SCAN_ERRORS。

Kinesis Data Streams 的 Flink 连接器

使用来自 Kinesis Data Streams 的数据有两种方法:Kinesis 来源连接器以及 Kinesis 接收器连接器。源连接器支持处理小于 1 MiB 和最多 10 MiBs MiB 的记录。对于大于 1 MiB 的记录,请勿使用接收器连接器。有关更多信息,请参阅使用 DataStream API 在适用于 Apache 的亚马逊托管服务 Flink 中使用连接器移动数据。

支持大型记录的区域

此 Amazon Kinesis 数据流功能仅在以下 AWS 地区可用:

AWS 区域 区域名称

eu-north-1

欧洲地区(斯德哥尔摩)

me-south-1

中东(巴林)

ap-south-1

亚太地区(孟买)

eu-west-3

欧洲地区(巴黎)

ap-southeast-3

亚太地区(雅加达)

us-east-2

美国东部(俄亥俄州)

af-south-1

非洲(开普敦)

eu-west-1

欧洲地区(爱尔兰)

me-central-1

中东(阿联酋):

eu-central-1

欧洲地区(法兰克福)

sa-east-1

南美洲(圣保罗)

ap-east-1

亚太地区(香港)

ap-south-2

亚太地区(海得拉巴)

us-east-1

美国东部(弗吉尼亚州北部)

ap-northeast-2

亚太地区(首尔)

ap-northeast-3

亚太地区(大阪)

eu-west-2

欧洲地区(伦敦)

ap-southeast-4

亚太地区(墨尔本)

ap-northeast-1

亚太地区(东京)

us-west-2

美国西部(俄勒冈州)

us-west-1

美国西部(北加利福尼亚)

ap-southeast-1

亚太地区(新加坡)

ap-southeast-2

亚太地区(悉尼)

il-central-1

以色列(特拉维夫)

ca-central-1

加拿大(中部)

ca-west-1

加拿大西部(卡尔加里)

eu-south-2

欧洲(西班牙)

cn-northwest-1

中国(宁夏)

eu-central-2

欧洲(苏黎世)

us-gov-east-1

AWS GovCloud (US-East)

us-gov-west-1

AWS GovCloud (US-West)