Как можно, чтобы более 5 лямбд потребляли один и тот же поток Kinesis? - PullRequest
0 голосов
/ 25 октября 2018

Я хотел бы иметь один поток Kinesis с большим количеством потребителей Lambda (разные функции Lambda, а не только несколько экземпляров одного и того же).

У Kinesis есть ограничение в 5 транзакций чтения в секунду ( документы ).Лямбда-функции будут опрашивать осколок каждую секунду.

Означает ли это, что я должен ожидать, что мои чтения будут ограничены, когда я добавлю шестого Lambda-потребителя в поток?

Я понимаю, что более 5 потребителей в одном потоке можно использовать с новым Улучшенная функция разветвления , но я не могу найти упоминания о функциях Lambda в отношении этой новой функции.Они говорят только о KCL2.

Вместо этого я нашел несколько старых статей людей, описывающих их собственные реализации разветвления, чтобы не отставать от Lambda-потребителей, например, этот .Интересно, по-прежнему ли это нужно, или потребители Lambda могут также воспользоваться преимуществами нового расширенного разветвления?

1 Ответ

0 голосов
/ 25 октября 2018

Можете ли вы попробовать что-то подобное?

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