Kinesis Stream Consumption: LATEST v/s TRIM_HORIZON



我有一个用例,我需要保持我的消费者(我们称之为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-这需要手动放入时间戳,我不想这样做。丢弃。

您只需要在创建事件源映射时选择初始起始点。一旦创建了映射,并且处理了消息,它就会记住它最后处理的消息。

所以像这样的一个序列会给你你想要的:

  1. TRIM_HORIZON(或LATEST)创建Lambda B和事件源映射;流中没有任何消息,所以它们在功能上是等同的)。
  2. 禁用事件源
  3. 启动Lambda A将消息写入流。
  4. 启用事件源。Lambda B将处理流中的消息。
  5. 根据需要重复步骤2-4。

最新更新