Что происходит с событиями в Dyanamo DB Stream после его получения AWS Lambda? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть таблица DynamoDB, и она связана с одним потоком, и этот поток связан с одной лямбда-функцией, которая ее обработала.

Вопрос - С указанным выше параметром, если событие приходит в поток и попадает в Lambda, это событие все еще находится в этом потоке, или оно выдается POPPED, как только оно попадает в Lambda, как очередь?

Вопрос 2 Может кто-нибудь любезно рассказать мне о внутренней работе DDB Stream и как он передает данные в Lambda? Например, есть ли состояния для потоковых событий?

PS: AWS В документации сказано, что события остаются в потоке в течение 24 часов.

1 Ответ

1 голос
/ 27 марта 2020

Здесь необходимо понять две концепции

  1. Потоки
  2. Триггеры

При любых изменениях в таблице, таких как добавление, обновление или удаление, функция Kinesis Stream AWS магазинов, которые меняются в течение 24 часов. Это выполняется четырьмя способами: -

  • Только ключи: - после изменения сохраняются только ключи
  • Новое изображение: - Сохраняется весь элемент, для которого выполняется изменение.
  • Старое изображение: - Когда для элемента выполняется изменение, старый элемент сохраняется вместо нового
  • Новое и старое: - не требует пояснений

Чтобы связать лямбда-функцию с вашими потоками, используется функция, называемая триггерами. Изменения вызывают триггер, который, в свою очередь, выполняет лямбда-функцию, связанную с изменением.

Часть 1 вашего вопроса: -

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

Часть 2 вашего вопроса: -

Потоки, о которых мы говорим, - это потоки Kinesis. Это функция, которая используется несколькими производителями и потребителями. Здесь производитель - DynamoDb, а потребитель - лямбда. Потребители выделяют пропускную способность чтения, поэтому им не приходится конкурировать с другими потребителями тех же данных. У потребителей Kinesis отправляет записи в Lambda через соединение HTTP / 2, что также может уменьшить задержку между добавлением записи и вызовом функции. Пропускная способность потоков определяется количеством осколков, которые он содержит. Осколки - это небольшие единицы емкости в потоке. Следовательно, чем выше значение осколка, тем выше емкость.

Полагаю, я объяснил работу в части 1 этого ответа. Не стесняйтесь задавать дополнительные вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...