AWS Kinesis流文档mentions
通常,当您使用KCL时,应确保实例数不超过分片数
如果实例数超过分片数,会有什么后果?我打算每个Web服务器运行一个worker(单独的线程)。因此,我想知道在启动新的Web服务器实例时是否 required 检查并比较分片数和正在运行的工作程序。或者,如果工人数超过分片数,就可以启动另一名工人而没有任何副作用。
答案 0 :(得分:5)
TL; DR:每个碎片只能有一个工人。任何额外的工人都会闲着。
如果您有一个带有两个分片的Kinesis流,并且您在利用KCL的单个实例上运行应用程序,该应用程序将在不同的线程中运行两个工作程序 - 每个分片一个工作程序(每个线程)。
如果您运行两个实例,您的应用程序将在一个线程中的每个实例上运行一个Worker - 两个实例,每个实例一个;一个Kinesis流,两个碎片。
每个工作人员对流中的分片进行租约,因此同一个应用程序的其他工作人员不能读取相同的分片。 Worker将租约信息存储在Dynamo DB中,以便其他Worker可以读取它。
如果您在此方案中运行3个实例,则其中一个实例将等待其他一个实例上的Worker丢失其租约。一旦其他工人失去租约,第三名工人就可以拿起来并开始处理。