【问题标题】:How can I have more than 5 Lambdas consume the same Kinesis stream?如何让超过 5 个 Lambda 使用相同的 Kinesis 流?
【发布时间】:2018-10-26 04:43:18
【问题描述】:

我希望拥有一个包含大量 Lambda 消费者的 Kinesis 流(不同的 Lambda 函数,而不仅仅是同一个函数的多个实例)。

Kinesis 限制为每秒 5 次读取事务 (docs)。 Lambda 函数将每秒轮询一个分片。

这是否意味着当我将第六个 Lambda 消费者添加到流中时,我的读取会受到限制?

我知道一个流中超过 5 个消费者可以使用新的Enhanced Fanout feature,但我找不到任何关于这个新功能的 Lambda 函数。他们只谈论 KCL2。

相反,我发现一些较早的人描述了他们自己的扇出实现以避免落后的 Lambda 消费者,例如,this one。我想知道这是否仍然需要,或者 Lambda 消费者也可以利用新的增强扇出。

【问题讨论】:

  • 你能有一个 Lambda 父级(消费),通过父级将流数据传递给子级来调用许多 lambda 子级吗?

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


【解决方案1】:

你能试试这样的吗?

/* in the parent lambda */

var consumers = [
  {
    id: "consumer",
    eventData: someData // stream data inserted here
  }
]

var params = {
  ClientContext: "MyApp", 
  FunctionName: "MyFunction", 
  InvocationType: "Event", 
  LogType: "Tail", 
  Payload:  null,        // <Binary String> 
  Qualifier: "1"
 };

let invoke = () => {
  return new Promise((resolve, reject) => {
    lambda.invoke(params, function(err, data) {
      if (err) reject(err);
      else     resolve(data);
    });
  })
}

invokeArr = []
consumers.map((consumer) => {
  params.Payload = consumer.eventData
  invokeArr.push(invoke)
})

Promise.all(invokeArr).then((data) => console.log('were done'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多