1

是否有可能做到这一点?

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

从我幼稚的角度来看,似乎上述解决方案对于 MSK 是不可能的,因为将消息放回 MSK 主题以实现某些可见性超时将有效地丢失主题传递顺序。

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

非常感谢!

4

1 回答 1

0

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

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

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

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

于 2021-01-11T21:25:35.297 回答