多个 EC2 实例上的相同 Kinesis 消费者 运行

Same Kinesis Consumer running on multiple EC2 instances

对于同一个微服务,我有多个 EC2 运行 实例,其中有一个 Kinesis 消费者 运行(带有 KCL)。

我的问题是,当Kinesis stream获取到一个新的事件时,由于所有的消费者都在轮询,所以同一个事件会被所有实例的消费者消费吗?

事件只会被一个消费者消费

KCL 的设计使得每个分片仅由一名工作人员处理 - 内置的租用机制是提供此功能的关键。

虽然在正常情况下,每个消费者只会收到其拥有租约的分片的消息,但也有一些边缘情况(通常由连接timeout/break引起)或主机 die/stop 响应)值得考虑,这可能会导致对来自流的消息进行双重处理。

举个具体的例子:如果一个 worker 未能续订租约(通常是由 worker 主机和 DynamoDB 之间的连接问题引起的),另一个 worker 可能会获得该租约并开始处理,而原来的 worker 仍在正在工作