Kinesis增强型扇出问题

0

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

profile picture
EXPERTE
gefragt vor 5 Monaten57 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen