【问题标题】:AWS Firehose data transformation concurrency limitsAWS Firehose 数据转换并发限制
【发布时间】:2017-05-30 14:46:25
【问题描述】:

我有一个用例,我必须每秒从不同的生产者收集数千条记录,并使用 AWS firehose 将它们推送到弹性搜索。我还在 firehose 上使用了数据转换 lambda,它在将记录传递回 firehose 之前进行了大量计算。

Firehose 应该在数据再次缓冲以传送到目的地之前异步调用每个缓冲批次的 lambda。

我以每秒 4k 条记录的进入速率运行了 15 分钟的基本测试,这是系统的响应方式。

Firehose CloudWatch Metrics

Lambda CloudWatch Metrics

查看 firehose 指标,很明显,firehose 花了一个多小时来处理所有传入事件。由于没有任何 lambda 限制(图 2),所以我想知道为什么 Firehose 没有运行尽可能多的 lambda 来跟上输入速率?

如第二张图所示,我每分钟大约有 30 次 lambda 调用,平均处理持续时间为 8000 毫秒。

所以我想知道 firehose 是否同时运行 lambda?有没有我遗漏的 firehose-lambda 并发限制?

【问题讨论】:

  • lambda 是否在 VPC 中运行?我在问,因为到目前为止我还没有完成 lambda-firehose 集成。如果是,那么您的 VPC 中可能没有足够的 ENI 可用?
  • 不,它没有在 VPC 中运行

标签: amazon-web-services lambda aws-lambda amazon-kinesis-firehose


【解决方案1】:

原则上,每个 Lambda 事件源将与 1 个 Lambda 实例相关联。这是为了确保处理数据的正确顺序。

如果您想以不保证数据具有正确排序为代价来增加吞吐量,您可以在 lambda 函数内部使用“InvokeAsync”(传递相同的参数)。这样您就可以再次调用 lambda,这次是异步的,这将按预期增加吞吐量。

可以在此处找到详细说明类似问题的博文:https://medium.com/retailmenot-engineering/building-a-high-throughput-data-pipeline-with-kinesis-lambda-and-dynamodb-7d78e992a02d

【讨论】:

  • 感谢您的回答,我看到了这篇博文,但是异步调用 lambda 不适用于我的用例,因为我需要将事件推送回 firehose
  • Kinesis 流将有每个分片 1 个 lambda 实例,也许这可能是增加吞吐量的一种方法?否则联系支持可能是您的最佳选择
猜你喜欢
  • 2018-07-02
  • 2019-08-23
  • 2020-10-02
  • 2020-10-01
  • 2020-08-21
  • 2019-09-26
  • 2020-09-15
  • 2021-10-10
  • 2019-09-29
相关资源
最近更新 更多