我们试图确定lambda的最佳shard-iterator-type
,但是在首次部署lambda之后,我得到了有关分片迭代器类型功能的混合信息。
有人告诉我,如果我们使用LATEST
shard-iterator-type
,当我们部署 lambda 的更新版本时,我们将丢失消息,因为 lambda 将始终从 kinesis 中提取最新的消息,并会忽略它在部署时未处理的消息。
我的问题是:这是正确的吗?
是的,这是正确的。
当你的应用开始使用迭代器类型开始读取时LATEST
它将从下一条记录开始读取。因此,队列中已有的所有数据都将被忽略。这意味着,如果你的应用有停机时间 - 该停机时间内的每条消息都将被跳过。
可以通过保存应用读取的最新消息的序列号,然后使用迭代器类型并提供保存AFTER_SEQUENCE_NUMBER
序列号来解决此问题。这就像一个检查站。
如果您的 lambda 是首次部署的(未保存以前的序列号(,您可能希望从以下任一开始:
TRIM_HORIZON
- 首先读取队列中最早的数据。如果您有大量数据且保留期较长,则可能有点太多LATEST
- 从下一封传入邮件开始读取