带有AWS Lambda的AWS MSK——消息确认



我在AWS官方文档中找不到任何关于AWS Lambda用于AWS MSK(托管Kafka(消息消费的确认模型的信息。

AWS Lambda如何确认来自AWS MSK的Kafka消息?是否可以对其进行配置(自动ack与手动ack(?

Kafka的确认模型将是相同的,无论您使用的是MSK还是其他什么——因此您在AWS文档中没有找到任何内容。您的使用者几乎需要将属性enable.auto.commit设置为true,以便您的使用者确认每5秒返回的所有记录。这5秒的间隔可以通过属性auto.commit.interval.ms进行配置。如果将属性enable.auto.commit设置为false,则由使用者通过显式调用方法commit()来确认每条记录。

现在请记住Lambda函数的性质。备份每个已部署函数的底层容器会不时地被回收,您在函数中实例化的任何对象(如KafkaConsumer(都将被销毁并按子顺序重新创建。这意味着在消耗过程中可能会遇到一些性能延迟,并且如果上次轮询没有提交所有读取记录,则记录可能会重复。使用者将从上次提交的偏移量开始恢复处理。

幸运的是,AWS发布了对MSK上每一条Kafka记录执行Lambda函数的感兴趣的支持。这里有一个链接,你可以了解更多关于这个:

https://aws.amazon.com/blogs/compute/using-amazon-msk-as-an-event-source-for-aws-lambda/

所以,这确实令人困惑,但在玩了它之后,我可以理解它是如何工作的。

因此,就我所探索的而言,没有直接的选项可以让你从AWS lambda与Kafka broker通信以提交偏移(即使有,我也不确定我们在排序中能做什么,我很乐意在评论中听到(。无服务器的Lambda无法维护consumer groups。相反,lambda服务在内部处理所有这些,并在某种程度上生成动态消费者组。

lambda服务不断地轮询来自Kafka的消息并调用lambda函数。只有当所有消息都被成功处理时,才会发生ack,即所有消息的lambda调用都成功,并且lambda没有面临任何运行时错误或调用失败。

但是,如果出现任何错误,lambda服务不会提交此批处理,并再次轮询同一批处理,直到成功为止。

因此,你需要计划你的流媒体,这样任何不需要的错误都不会阻止你的处理,这可以通过智能准确地捕捉代码中的错误来实现,然后决定是引发错误还是让它成功退出。

可避免的错误可能会阻塞您的流,并导致更高的consumer lag,因此您希望在捕捉错误时准确无误。

关键是,您不能从lambda显式地向Kafka主题ack消息,它是由lambda服务内部管理的。您可以通过让lambda失败来做到这一点->没有提交或错误处理成功->commit。有点像我几个月前的

最新更新