如何让超过5个Lambda消耗相同的Kinesis流?

时间:2018-10-25 13:20:51

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

我想让一个Kinesis流具有很多Lambda使用者(不同的Lambda函数,而不仅仅是同一个Lambda的许多实例)。

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

这是否意味着当我向流中添加第六个Lambda使用者时,我应该期望我的读取受到限制?

我知道一个新的Enhanced Fanout feature可以在一个流上实现5个以上的消费者,但是我找不到关于此新功能的Lambda函数。他们只谈论KCL2。

相反,我发现一些较老的文章描述了自己的扇出实现,以避免落后于Lambda消费者,例如this one。我想知道是否仍然需要这样做,还是Lambda消费者也可以利用新的增强型扇出功能。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情吗?

/* 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'))