

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

# 处理大型记录
<a name="large-records"></a>

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

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

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

## 大型记录的工作原理
<a name="how-large-records-work"></a>

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

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

容量的补充速度取决于以下几个因素：
+ 大型记录的大小
+ 基线记录的大小
+ 直播中的整体流量模式
+ 您选择的分区键策略

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

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

## 更新您的流以使用大型记录
<a name="update-stream"></a>

**使用 Kinesis Data Streams 处理较大记录**

1. 导航到 Kinesis Data Streams 控制台。

1. 选择您的流，然后前往**配置**选项卡。

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

1. 设置最大记录大小（最大值为 10 MiB）。

1. 保存更改。

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

您也可以使用 Amazon CLI 更新此设置：

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

## 使用大型记录优化流性能
<a name="optimizing-performance"></a>

大型记录专为间歇性使用而设计。为了获得最佳效果，请将大型记录保持在总流量的2％以下。由于数据流会暂时突破其持续吞吐量以提供大型记录，因此过于频繁地发送大型记录会减少基准流量的可用容量。有关使用大型记录优化直播性能的更多信息，请参阅[限制和实现最佳性能的最佳实践](https://www.amazonaws.cn/blogs/big-data/amazon-kinesis-data-streams-now-supports-10x-larger-record-sizes-simplifying-real-time-data-processing/#:~:text=Throttling%20and%20best%20practices%20for%20optimal%20performance)。

## 使用大型记录缓解限制
<a name="mitigate-throttling"></a>

由于大型记录会暂时消耗突发容量，因此在容量补充之前，您的数据流可能会限制后续写入。以下步骤有助于减少限制：

**缓解限制**

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

1. 使用随机分区键在流的可用容量中分发大型记录。

1. 对于连续的大型记录流，将有效载荷存储在 Amazon S3 中，仅向流发送元数据引用。有关更多信息，请参阅[使用 Amazon Kinesis Data Streams 处理大型记录](https://www.amazonaws.cn/blogs/big-data/processing-large-records-with-amazon-kinesis-data-streams/)。

## 使用 Kinesis Data Streams 处理大型记录 APIs
<a name="records-apis"></a>

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

用于修改记录大小的 API：
+ `UpdateMaxRecordSize`：为现有直播配置最大记录大小限制，最多 10 MiBs。

对现有版本的更新 APIs：
+ `CreateStream`：添加可选 `MaxRecordSizeInKiB` 参数，用于在创建流期间设置记录大小限制。
+ `DescribeStreamSummary`：返回 `MaxRecordSizeInKiB` 字段显示当前的流配置。

所有 APIs 列出的内容都保持了对现有直播的向后兼容性。有关完整的 API 文档，请参阅 [Amazon Kinesis Data Streams 服务 API 参考](https://docs.amazonaws.cn/kinesis/latest/APIReference/Welcome.html)。

## Amazon 与大型唱片兼容的组件
<a name="record-compatability"></a>

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


| 组件 | 说明 | 
| --- | --- | 
| Amazon SDK | Amazon SDK 支持处理大型记录。您可以使用中的可用方法更新直播的最大记录大小（最多 10 MiB）。 Amazon SDKs有关更多信息，请参阅将[此服务与 Amazon SDK 配合使用](https://docs.amazonaws.cn/streams/latest/dev/sdk-general-information-section.html)。 | 
| Kinesis Consuer Library（KCL） | KCL 从 2.x 版开始支持处理大型记录。要使用大型录制支持，请更新流的 `maxRecordSize` 并使用 KCL。有关更多信息，请参阅[使用 Kinesis Client Library](https://docs.amazonaws.cn/streams/latest/dev/kcl.html) 。 | 
| Kinesis Producer Library（KPL） | KPL 从 1.0.5 版开始支持处理大型记录。要使用大型录制支持，请更新流的 maxRecordSize 并使用 KPL。有关更多信息，请参阅[使用 Amazon Kinesis Producer Library（KPL）开发产生器](https://docs.amazonaws.cn/streams/latest/dev/developing-producers-with-kpl.html)。 | 
| Amazon EMR | 带有 Apache Spark 的 Amazon EMR 支持处理不超过 Kinesis Data Streams 限制 (10) 的大型记录。 MiBs要使用大型记录支持，请使用 `readStream` 函数。有关更多信息，请参阅[ Amazon EMR 与 Amazon Kinesis 集成](https://docs.amazonaws.cn/emr/latest/ReleaseGuide/emr-kinesis.html)。 | 
| Amazon Data Firehose | 与 Kinesis Data Streams 一起使用时，Amazon Data Firehose 处理大型记录的行为取决于传输目的地：[See the AWS documentation website for more details](http://docs.amazonaws.cn/streams/latest/dev/large-records.html)<br />对于需要向 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 文档，其中包含有关调用失败的元数据。<br />无论记录大小如何，都建议在 ESM 中创建一个失败时的目标。这可以确保不会丢弃任何记录。有关更多信息，请参阅[配置调用失败时的目标](https://docs.amazonaws.cn/lambda/latest/dg/kinesis-on-failure-destination.html#kinesis-on-failure-destination-console)。 | 
| Amazon Redshift | 在从 Kinesis Data Streams 流式传输数据时，Amazon Redshift 仅支持小于 1 MiB 的记录大小。超过此限制的记录将不予处理。未处理的记录记录为 `sys_stream_scan_errors`。有关更多信息，请参阅 [SYS\_STREAM\_SCAN\_ERRORS](https://docs.amazonaws.cn/redshift/latest/dg/r_SYS_STREAM_SCAN_ERRORS.html)。 | 
| Kinesis Data Streams 的 Flink 连接器 | 使用来自 Kinesis Data Streams 的数据有两种方法：Kinesis 来源连接器以及 Kinesis 接收器连接器。源连接器支持处理小于 1 MiB 和最多 10 MiB 的记录。 MiBs对于大于 1 MiB 的记录，请勿使用接收器连接器。有关更多信息，请参阅[使用 API 使用连接器在适用于 Apache Flink 的亚马逊托管服务中 DataStream移动数据](https://docs.amazonaws.cn/managed-flink/latest/java/how-connectors.html)。 | 

## 支持大型记录的区域
<a name="supported-regions"></a>

此 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 （美国西部） | 