重新触发从Kafka队列读取的AWS Lambda函数

时间:2020-04-20 11:45:05

标签: logging apache-kafka aws-lambda

我编写了一个AWS lambda函数,该函数每15分钟启动一次。该功能从Kafka队列中读取2分钟,然后将它们存储在一个临时文件中;如果将文件上传到S3存储桶,则在2分钟结束时。

当前,存储桶在其写入策略中没有lambda的IAM角色,因此上载到S3会引发异常。所有这些都很好,一旦添加了适当的策略,就不应有例外。

我对上述内容有疑问:

  1. 每2分钟就会出现一次lambda函数。这是因为上一次调用以错误结束吗?
  2. 由于我正在从Kafka中读取内容,因此我使用的是固定的群组ID,这样我就不会再阅读两次邮件了。假设lambda由于某些问题(不是连接性问题,而是其他原因)而中途失败。如果出现另一个功能,它将从最近读取的消息开始读取。但是,由于先前的调用在途中失败,并且无法将消息写入S3存储桶,因此第二次调用将丢失这些消息。有没有一种方法我不会错过这些消息? (我的想法是在每次调用完成后将偏移量存储在S3中,并手动将这些偏移量分配给使用者,这样,如果任何调用在途中失败,则偏移量将不会受到影响,并且我不会丢失任何消息。但是如果有办法避免从S3中读取内容,那就太好了。

1 个答案:

答案 0 :(得分:0)

经过一番挖掘并使用了lambda,我终于得到了答案:

  1. 是的,如果先前的调用以错误结束,则lambda function将重新触发几次。可以在lambda属性中进行配置。

  2. 写入S3存储桶是最终步骤。由于我想确保在下次调用时不更新偏移量,因此将auto-commit中的consumer-configurations功能设置为false。然后,在对S3存储桶的写入完成后,手动提交。这将确保如果对S3的写入失败,则下次lambda调用将从头开始读取。