AWS Kinesis 流文档提到
通常,在使用 KCL 时,应确保实例数不超过分片数
如果实例数超过分片数会产生什么后果?我计划在每台 Web 服务器(单独的线程)上运行一名工作人员。所以我想知道当一个新的 Web 服务器实例启动时,是否需要检查和比较分片和正在运行的工作人员的数量。或者,如果工人数量超过分片数量,是否可以只启动另一个工人而没有任何副作用。
AWS Kinesis 流文档提到
通常,在使用 KCL 时,应确保实例数不超过分片数
如果实例数超过分片数会产生什么后果?我计划在每台 Web 服务器(单独的线程)上运行一名工作人员。所以我想知道当一个新的 Web 服务器实例启动时,是否需要检查和比较分片和正在运行的工作人员的数量。或者,如果工人数量超过分片数量,是否可以只启动另一个工人而没有任何副作用。
TL; DR:每个分片只能有一个工人。任何额外的工人都会闲置。
如果您有一个包含两个分片的 Kinesis 流,并且您在利用 KCL 的单个实例上运行应用程序,则该应用程序将在不同的线程中运行两个工作程序——每个分片(每个线程)一个工作程序。
如果您运行两个实例,您的应用程序将在一个线程中的每个实例上运行一个 Worker——两个实例,每个一个 Worker;一个 Kinesis 流,两个分片。
每个工作人员都对流中的分片进行租约,因此同一应用程序的其他工作人员无法读取相同的分片。Worker 将租约信息存储在 Dynamo DB 中,以便其他 Worker 可以读取它。
如果您要在这种情况下运行 3 个实例,其中一个实例将等待其他实例之一上的 Worker 失去其租约。一旦其他 Worker 中的一个失去其租约,第三个 Worker 就可以拿起流并开始处理。