重新分片、扩展和并行处理 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

重新分片、扩展和并行处理

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

使用租约表跟踪 KCL 消费端应用程序处理的分片 中所述,KCL 使用 Amazon DynamoDB 表跟踪流中的分片。当由于重新分片而创建新分片时,KCL 会发现新分片并在该表中填充新行。工作程序将自动发现新的分片并创建处理器以处理来自分片的数据。KCL 还将跨所有可用工作程序和记录处理器分配流中的分片。

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

示例:重新分片、扩展和并行处理

以下示例将演示 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 用户指南

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

有关重新分片的更多信息,请参阅对流进行重新分片