我有一个用例,我需要保持我的消费者(我们称之为Lambda B)上的Kinesis触发器被禁用,而生产者(我们称之为Lambda a)向Kinesis流写入。一旦写入完成,我打算启用触发器,Lambda B应该能够处理kineesis流中的数据。考虑到这种情况:
LATEST
-这意味着在之后写入流的记录将处理启用Lambda触发器。在禁用阶段写入的记录将不被处理。不适合我的用例。丢弃。
TRIM_HORIZON
-流中的所有记录将被处理。好吧,这适用于我的用例。我在想象一个触发enabled(1) -> disabled -> enabled(2)
的情况。启用(2)后,Lambda B将读取在禁用状态下放入的记录。这很好。但是,它还会读取在启用(1)阶段已经读取的记录吗(因为kineesis保留了24小时的记录)?如果是这样,那么这是一个问题。
AT_TIMESTAMP
-这需要手动放入时间戳,我不想这样做。丢弃。
您只需要在创建事件源映射时选择初始起始点。一旦创建了映射,并且处理了消息,它就会记住它最后处理的消息。
所以像这样的一个序列会给你你想要的:
- 用
TRIM_HORIZON
(或LATEST
)创建Lambda B和事件源映射;流中没有任何消息,所以它们在功能上是等同的)。 - 禁用事件源
- 启动Lambda A将消息写入流。
- 启用事件源。Lambda B将处理流中的消息。
- 根据需要重复步骤2-4。