将KCL与AWS Kinesis流一起使用时,如果工作程序的数量>分片的数量会发生什么?

H11*_*101 3 amazon-web-services amazon-kinesis amazon-kcl

AWS Kinesis流文档中提到

通常,在使用KCL时,应确保实例数不超过分片数。

如果实例数超过分片数,将会有什么后果?我计划在每台Web服务器上运行一个工作线程(独立线程)。因此,我想知道在启动新的Web服务器实例时是否需要检查并比较分片和正在运行的工作程序的数量。或者,如果工人的数量超过分片的数量,则可以在不产生任何副作用的情况下直接启动另一名工人。

dev*_*rus 6

TL; DR:每个碎片只能有一个工人。任何其他工人将闲置。

如果您的Kinesis流具有两个分片,并且您在利用KCL的单个实例上运行应用程序,则该应用程序将在单独的线程中运行两个工作程序-每个分片(每个线程)一个工作程序。

如果您运行两个实例,则您的应用程序将在线程中的每个实例上运行一个工作程序-两个实例,每个工作程序一个;一个Kinesis流,两个碎片。

每个工作人员针对流中的分片进行租约,因此同一应用程序的其他工作人员无法读取相同的分片。工人将租赁信息存储在Dynamo DB中,以便其他工人可以读取它。

如果在这种情况下要运行3个实例,则其中一个实例会围着等待其他实例之一的Worker失去其租约。一旦其他工人之一失去租约,第三个工人便可以接管并开始处理。

  • 此外,AWS人士这样说_“如果您使用的是Kinesis Client Library,则可以查看它由应用程序发出的自定义CloudWatch指标。在这里您可以确定工作人员的数量以及有关您的消耗量的更多信息如果我们有更多的工作人员,而不是流中的分片数量,那该怎么办?我相信有些工作人员将不会收到分片租约,因此不会消耗流中的数据。” (2认同)