View a markdown version of this page

处理大型记录 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

处理大型记录

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

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

重要

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

大型记录的工作原理

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

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

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

  • 大型记录的大小

  • 基线记录的大小

  • 直播中的整体流量模式

  • 您选择的分区键策略

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

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

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

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

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

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

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

  5. 保存更改。

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

您也可以使用 Amazon 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 处理大型记录 APIs

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

用于修改记录大小的 API:

  • UpdateMaxRecordSize:为现有直播配置最大记录大小限制,最多 10 MiBs。

对现有版本的更新 APIs:

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

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

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

Amazon 与大型唱片兼容的组件

以下 Amazon 组件与大型唱片兼容:

组件 说明

Amazon SDK

Amazon SDK 支持处理大型记录。您可以使用中的可用方法更新直播的最大记录大小(最多 10 MiB)。 Amazon SDKs有关更多信息,请参阅将此服务与 Amazon 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 Data Streams 限制 (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)过程来加载数据。对于所有其他目的地,在扩展到生产使用量之前,请在 proof-of-concept环境中使用大型记录测试行为。大型记录的处理因目的地而不同。

Amazon Lambda

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

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

Amazon Redshift

在从 Kinesis Data Streams 流式传输数据时,Amazon Redshift 仅支持小于 1 MiB 的记录大小。超过此限制的记录将不予处理。未处理的记录记录为 sys_stream_scan_errors。有关更多信息,请参阅 SYS_STREAM_SCAN_ERRORS

Kinesis Data Streams 的 Flink 连接器

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

支持大型记录的区域

此 Amazon Kinesis Data Streams 功能仅在 Amazon 以下区域可用:

Amazon 区域 区域名称

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

Amazon GovCloud (美国东部)

us-gov-west-1

Amazon GovCloud (美国西部)