Kinesis增强型扇出问题

0

【以下的问题经过翻译处理】 使用Kinesis增强型扇出时,可以订阅单独的分片。我想了解下当进行重新分片时,消费者会发生什么?

profile picture
专家
已提问 5 个月前51 查看次数
1 回答
0

【以下的回答经过翻译处理】 下面这个链接介绍了重分片并且应该可以回答这个问题。 https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-scaling.html


重分片、扩展和并行处理

重分片允许增加或减少Kinesis流中的分片数量,以适应经过流的数据速率的变化。重分片通常由一个监控分片数据处理指标的管理应用程序执行。尽管KCL本身不会启动重分片操作,但它被设计用于适应由重分片导致的分片数量的变化。

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

KCL确保先处理重分片之前存在于分片中的任何数据。处理完该数据后,从新的分片中发送数据到记录处理器。通过这种方式,KCL保留了特定分区键添加数据记录到流中的顺序。

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

以下示例说明了KCL如何帮助您处理扩展和重分片:

  • 比方说,如果您的应用程序在一个EC2实例上运行,并且正在处理一个具有4个分片的Kinesis数据流。这一个实例有一个KCL工作程序和4个记录处理器(每个分片一个记录处理器)。这4个记录处理器在同一进程内并行运行。
  • 接下来,如果您扩展应用程序以使用其他实例,您将有2个都包含 4 个分片的流的实例。当KCL工作程序在第二个实例上启动时,它会与第一个实例进行负载均衡,以便让每个实例现在处理两个分片。
  • 如果您随后决定将4个分片拆分为5个分片。KCL会跨实例协调处理:一个实例处理 3 个分片,另一个实例处理2个分片。类似协调在合并分片时出发生。

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

要扩展您的应用程序中的处理,应测试以下方法的组合:

  • 增加实例大小(因为所有记录处理器都在进程内并行运行)
  • 增加实例的数量,最多为开放分片的最大数量(因为分片可以单独处理)
  • 增加分片的数量(这会提高并行机制的级别)

请注意,您可以使用Auto Scaling基于适当的指标自动扩展您的实例。有关更多信息,请参阅Amazon EC2 Auto Scaling用户指南。

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

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

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则