微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 AWS Lambda 和 MSK (Kafka) 事件流应用背压

如何解决如何使用 AWS Lambda 和 MSK (Kafka) 事件流应用背压

可以这样做吗?

在处理 SQS 事件流时,如果 Lambda 函数没有足够的预留并发,函数将被节流,未处理的事件/消息可以通过 SQS 重驱动策略重试。我从不喜欢这种限制,因为在任意次数的重试/消息可见性超时后,未处理的消息最终会出现在 DLQ 上。

从我幼稚的角度来看,MSK 似乎无法实现上述解决方案,因为在某个可见性超时内将消息放回 MSK 主题会有效地失去主题交付顺序。

我四处搜索,但找不到任何关于如何使用 MSK 实现背压到 Lambda 的详细信息。有没有人了解 MSK 主题消费者如何处理 Lambda 限制?

非常感谢!

解决方法

实际上除了支持 DLQ 之外,还支持此方案。但是对 MSK 工作原理的理解与 SQS 有点不同。在 MSK(即 Apache Kafka)中,记录是持久且持久的;为处理器指示应该重试给定记录的是消费者创建的称为 commit-offset 的标志。如果 lambda 函数读取记录但没有完成其处理,那么只是不提交其各自的偏移量,在下一个轮询周期中记录将再次被拾取。

此外,Kafka 有一个轮询模型而不是推送。在这种情况下,您的 lambda 函数执行轮询,指示每次轮询必须读取多少记录。所以你看; Kafka 中有很多控件可以实现背压——只是它在 SQS 中的工作方式并不完全相同。

下面的例子可以让你了解它是如何工作的:

https://github.com/aws-samples/integration-sample-lambda-msk

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。