将 kinesis 分片迭代器类型设置为 LATEST 是否会丢失 lambda 中的消息?



我们试图确定lambda的最佳shard-iterator-type,但是在首次部署lambda之后,我得到了有关分片迭代器类型功能的混合信息。

有人告诉我,如果我们使用LATESTshard-iterator-type,当我们部署 lambda 的更新版本时,我们将丢失消息,因为 lambda 将始终从 kinesis 中提取最新的消息,并会忽略它在部署时未处理的消息。

我的问题是:这是正确的吗?

是的,这是正确的。

当你的应用开始使用迭代器类型开始读取时LATEST它将从下一条记录开始读取。因此,队列中已有的所有数据都将被忽略。这意味着,如果你的应用有停机时间 - 该停机时间内的每条消息都将被跳过。

可以通过保存应用读取的最新消息的序列号,然后使用迭代器类型并提供保存AFTER_SEQUENCE_NUMBER序列号来解决此问题。这就像一个检查站。

如果您的 lambda 是首次部署的(未保存以前的序列号(,您可能希望从以下任一开始:

  • TRIM_HORIZON- 首先读取队列中最早的数据。如果您有大量数据且保留期较长,则可能有点太多
  • LATEST- 从下一封传入邮件开始读取

最新更新