

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

# 使用重新分片、扩展和并行处理更改分片数量
<a name="kinesis-record-processor-scaling"></a>

利用*重新分片*，您可以增加或减少流中的分片的数量，以便适应流过流的数据的速率的变化。重新分片通常是由监控分片数据处理指标的管理应用程序执行的。尽管 KCL 本身不启动重新分片操作，但它能够适应由于重新分片而生成的分片的数量的变化。

如 [使用租约表跟踪 KCL 消费端应用程序处理的分片](shared-throughput-kcl-consumers.md#shared-throughput-kcl-consumers-leasetable) 中所述，KCL 使用 Amazon DynamoDB 表跟踪流中的分片。当由于重新分片而创建新分片时，KCL 会发现新分片并在该表中填充新行。工作程序将自动发现新的分片并创建处理器以处理来自分片的数据。KCL 还将跨所有可用工作程序和记录处理器分配流中的分片。

KCL 将确保优先处理在重新分片之前已存在于分片中的任何数据。在处理该数据后，新分片中的数据将发送到记录处理器。这样，KCL 便能保留为特定分区键将数据记录添加到流的顺序。

## 示例：重新分片、扩展和并行处理
<a name="kinesis-record-processor-scaling-example"></a>

以下示例将演示 KCL 如何帮助您处理扩展和重新分片：
+ 例如，如果您的应用程序正在 1 个 EC2 实例上运行，并且正在处理 1 个包含 4 个分片的 Kinesis 数据流。这 1 个实例包含 1 个 KCL 工作程序和 4 个记录处理器（每个分片有 1 个记录处理器）。这 4 个记录处理器在同一进程内并行运行。
+ 接下来，如果您扩展应用程序以使用其他实例，您将有 2 个处理 1 个包含 4 个分片的流的实例。当 KCL 工作程序在第二个实例上启动时，它会与第一个实例进行负载均衡，以便让每个实例现在处理两个分片。
+ 如果您随后决定将 4 个分片拆分为 5 个分片。KCL 会再次跨实例协调处理：一个实例处理 3 个分片，另一个实例处理 2 个分片。类似协调在合并分片时出发生。

通常，在使用 KCL 时，您应确保实例的数量不超过分片的数量（故障待机除外）。每个分片正好由一个 KCL 工作程序处理，并且正好有一个对应的记录处理器，因此您永远不需要多个实例来处理一个分片。但是，一个工作程序可处理任意数量的分片，因此分片的数量超过实例的数量没有关系。

要扩展您的应用程序中的处理，您应测试以下方法的组合：
+ 增加实例大小（因为所有记录处理器都在进程内并行运行）
+ 增加实例的数量，最多为开放分片的最大数量（因为分片可以单独处理）
+ 增加分片的数量（这会提高并行机制的级别）

请注意，您可使用自动扩缩，从而基于适当的指标自动扩展您的实例。有关更多信息，请参阅 [Amazon EC2 Auto Scaling 用户指南](https://docs.aws.amazon.com/autoscaling/ec2/userguide/)。

当重新分片增加了流中的分片数时，记录处理器的数量的相应增加会增加托管处理器的 EC2 实例上的负载。如果实例为 Auto Scaling 组的一部分，并且负载增加得足够多，则 Auto Scaling 组会添加更多实例来处理增加的负载。您应在启动时配置用来启动 Amazon Kinesis Data Streams 应用程序的实例，以便让其他工作程序和记录处理器在新实例上立即激活。

有关重新分片的更多信息，请参阅[对流进行重新分片](kinesis-using-sdk-java-resharding.md)。