【问题标题】:How to apply back pressure with AWS Lambda and MSK (Kafka) event stream如何使用 AWS Lambda 和 MSK (Kafka) 事件流应用背压
【发布时间】:2021-04-15 02:09:21
【问题描述】:

可以这样做吗?

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

从我幼稚的角度来看,上述解决方案似乎不适用于 MSK,因为将消息放回 MSK 主题上以达到某些可见性超时实际上会丢失主题传递顺序。

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

非常感谢!

【问题讨论】:

    标签: aws-lambda backpressure aws-msk


    【解决方案1】:

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

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

    下面的示例可能会让您了解它的工作原理:

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

    【讨论】:

    • 感谢您的回答。是主题消费者的 Lambda MSK 事件流吗?这是有道理的,即如果消费者没有可用的 lambda,那么提交的偏移量不会更新并且主题分区会有效地停止?您对此流程/架构的文档有任何参考吗?我真的很想了解它是如何实现的。
    • 正确:Lambda MSK 事件流充当 Kafka 主题的消费者并处理其中的记录。在每次轮询时,都会读取一组记录,然后将其发送到 Lambda 函数。 AWS 的此博客提供了更多详细信息:aws.amazon.com/blogs/compute/…
    猜你喜欢
    • 2021-02-07
    • 2021-12-23
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多