运动至少一次语义

Kinesis at least once semantics

根据文档,Kinesis 至少有一次语义。我正在尝试找出一种方法来确保检测到重复项。如果存在重复记录,是否可以保证它与原始记录来自同一个分片?我问的原因是,这将确定我的重复检测是否需要 "global",因为如果我有多个实例处理一个流,我是否需要检测这些实例中的重复项?如果副本来自同一个分片,那么这意味着同一个记录处理器很可能会看到副本(当然是同一个实例),然后我的副本检测可以是 "local" 那个实例。

决定性的答案实际上是检查后备存储或索引 以查看记录是否已经插入(DynamoDB、Redshift、RDS 等)。最佳做法是将数据存储与 Kinesis 处理器实例分开,这样您只需检查一个位置。有几种方法可以做到这一点,这可能是另一个问题的主题。

如果您使用的是 KCL,那么它会自行处理分片,您无需处理它们。使用 KCL,您的实例使用的分片可能会随着时间的推移而改变,因此我不建议创建一个依赖于始终从同一分片接收数据的实例的系统。

不过要回答这个问题,如果一条唯一记录从一个分片中消耗了一次并且(无论出于何种原因)再次出现,它将第二次来自同一个分片因为它的分区键不会改变。

注意:通常只有当第一次交付该记录批次失败时,才会收到第二次记录。