重新触发从kafka队列读取的aws lambda函数

t0ybt7op  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(422)

我编写了一个aws lambda函数,每15分钟启动一次。函数从kafka队列中读取2分钟,将其存储在临时文件中,并在2分钟结束时将文件上载到s3存储桶。
目前,bucket在其写入策略中没有lambda的iam角色,因此upload to s3抛出异常。所有这些都很好,一旦添加了适当的策略,就不应该有例外。
我对上述有一些疑问:
lambda函数每2分钟就会出现一次。这是因为上一次调用以错误结束吗?
因为我在读Kafka,所以我使用了一个固定的组id,这样我就不会读两次消息了。假设lambda由于某些问题(不是连接问题,而是其他问题)中途失败。如果出现另一个函数,它将从上次读取的消息开始读取。但是,由于上一次调用中途失败,无法将消息写入s3 bucket,因此第二次调用将丢失这些消息。有没有办法让我不错过那些留言我有一个想法,在每次调用完成后将偏移量存储在s3中,并手动将这些偏移量分配给使用者,这样,如果任何调用中途失败,偏移量都不会受到影响,也不会丢失任何消息。但是如果有一种方法可以避免从s3读取数据,那就太好了)。

khbbv19g

khbbv19g1#

经过一番挖掘和玩耍,我终于得到了答案:
对, lambda function 如果上一次调用以错误结束,则会重新触发几次。这可以在 lambda 属性。
写信给 S3 桶是最后一步。因为我想确保偏移量不会为下一次调用更新,所以我的想法是 auto-commit 中的功能 consumer-configurationsfalse . 然后在对s3 bucket的写入完成后手动提交。这将确保在写入s3失败时,lambda的下一次调用将从头开始读取。

相关问题