将 kinesis shard-iterator-type 设置为 LATEST 是否有在 lambda 中丢失消息的风险?

Does setting a kinesis shard-iterator-type to LATEST risk losing messages in lambda?

我们正在尝试为我们的 lambda 确定最好的 shard-iterator-type,但我得到了关于分片迭代器类型功能的混合信息 AFTER 一个 lambda 已经首次部署。

有人告诉我,如果我们使用 shard-iterator-type of LATEST,当我们去部署更新版本的 lambda 时,我们将丢失消息,因为 lambda 总是拉取最多来自 kinesis 的最新消息,并将忽略它在部署时未处理的消息。

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

是的,没错。

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

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

如果您的 lambda 是第一次部署(没有保存之前的序列号),您可能想从以下任一开始:

  • TRIM_HORIZON - 从读取队列中最早的数据开始。如果您有大量数据和较长的保留期,可能会有点太多
  • LATEST - 从下一条收到的消息开始阅读