将 KCL 与 AWS Kinesis 流结合使用时,如果工作人员数量 > 分片数量会怎样?
What happens if the number of workers is > number of shards when using KCL with AWS Kinesis streams?
AWS Kinesis 流文档mentions
Typically, when you use the KCL, you should ensure that the number of instances does not exceed the number of shards
实例数超过分片数会有什么后果?我计划 运行 每个 Web 服务器(单独的线程)一名工人。所以我想知道是否需要在启动新的Web服务器实例时检查和比较分片数量和运行 worker。或者,如果工人的数量超过分片的数量,是否可以启动另一个工人而没有任何副作用。
TL; DR:每个 Shard 只能有一个 Worker。任何额外的 Worker 都将闲置。
如果您有一个带有两个分片的 Kinesis 流,并且您 运行 在一个利用 KCL 的单个实例上运行一个应用程序,该应用程序将 运行 两个工作线程中的两个工作线程——一个工作线程每个分片(每个线程)。
如果您 运行 两个实例,您的应用将 运行 在一个线程中的每个实例上使用一个 Worker——两个实例,每个实例一个 worker;一个 Kinesis 流,两个分片。
每个工作人员都对流中的一个分片进行租约,这样同一应用程序的其他工作人员就无法读取同一个分片。 Worker 将租赁信息存储在 Dynamo DB 中,以便其他 Worker 可以读取它。
如果在这种情况下要 运行 3 个实例,其中一个实例将等待其他实例之一上的 Worker 失去租约。一旦其他 Worker 中的一个失去租约,第三个 Worker 就可以接管流并开始处理。
AWS Kinesis 流文档mentions
Typically, when you use the KCL, you should ensure that the number of instances does not exceed the number of shards
实例数超过分片数会有什么后果?我计划 运行 每个 Web 服务器(单独的线程)一名工人。所以我想知道是否需要在启动新的Web服务器实例时检查和比较分片数量和运行 worker。或者,如果工人的数量超过分片的数量,是否可以启动另一个工人而没有任何副作用。
TL; DR:每个 Shard 只能有一个 Worker。任何额外的 Worker 都将闲置。
如果您有一个带有两个分片的 Kinesis 流,并且您 运行 在一个利用 KCL 的单个实例上运行一个应用程序,该应用程序将 运行 两个工作线程中的两个工作线程——一个工作线程每个分片(每个线程)。
如果您 运行 两个实例,您的应用将 运行 在一个线程中的每个实例上使用一个 Worker——两个实例,每个实例一个 worker;一个 Kinesis 流,两个分片。
每个工作人员都对流中的一个分片进行租约,这样同一应用程序的其他工作人员就无法读取同一个分片。 Worker 将租赁信息存储在 Dynamo DB 中,以便其他 Worker 可以读取它。
如果在这种情况下要 运行 3 个实例,其中一个实例将等待其他实例之一上的 Worker 失去租约。一旦其他 Worker 中的一个失去租约,第三个 Worker 就可以接管流并开始处理。