我想将来自AWS Kinesis流的消息处理延迟一小时。我已将KCL使用者配置为每四分钟读取一批记录,检查每条记录的时间戳,并在任何记录少于一个小时的情况下停止处理该批记录,而无需检查点。我希望同一个使用者实例每四分钟重新读取一次相同的消息,直到整个批处理足够旧以进行处理,然后再检查使用者。但是,实际上,使用者只读取一次消息,这意味着它们将被忽略,并且在准备处理时再也不会读取。有没有一种方法可以配置使用者每次都从上一个检查点重新读取所有消息?
答案 0 :(得分:0)
我很喜欢从AWS Kinesis Stream开箱即用的东西(可能延迟事件交付的配置)。如果没有这种方法,您有一种方法可以延迟事件的处理,而这会浪费计算的成本。
使用SQS(或FIFO SQS,如果您关心事件顺序)而不是Kinesis,或在Kinesis Stream上使用AWS Lambda将事件转移到SQS。 SQS支持delaying the delivery of a message最多15分钟。由于您需要60分钟的延迟,因此您可以运行另一个Lambda(或您自己的SQS使用者)来处理消息。在首次向Lambda(或您的SQS使用者)发送消息时,不处理消息,而只是将消息的visibility timeout设置为45分钟(总计需要60分钟的延迟)。仅在第二次收到SQS消息后,才对其进行处理。您可以先检查邮件已发送多少次,然后再决定是否要处理或跳过处理该邮件。