我有多个 EC2 实例运行同一个微服务,其中一个 Kinesis 消费者在运行(使用 KCL)。 我的问题是,当 Kinesis 流接收到新事件时,由于所有消费者都在轮询,这些实例的所有消费者是否都会消费相同的事件?
KCL的设计使得每个分片仅由一个工作程序处理 - 内置租赁机制是提供此功能的关键。 尽管在正常情况下,每个消费者只会接收到其拥有租赁的分片的消息,但值得考虑一些边缘情况(通常是由于连接超时/中断或主机死机/停止响应引起),可能导致对来自流的消息进行重复处理。 以具体示例说明:如果工作程序未能更新租约(通常是由于工作程序主机和DynamoDB之间的连接问题),则可能会另一个工作程序获取该租赁并开始处理,而原始工作程序仍在处理工作。