поток данных кинезис не в режиме реального времени? - PullRequest
2 голосов
/ 25 сентября 2019

Получена функция, запускаемая в сообщениях потока kinesis (serverless.yml):

functions:
  kinesis-handler:
    handler: kinesis-handler.handle
    events:
      - stream:
          type: kinesis
          arn:
            Fn::Join:
              - ':'
              - - arn
                - aws
                - kinesis
                - Ref: AWS::Region
                - Ref: AWS::AccountId
                - stream/intercom-stream
          startingPosition: LATEST
          batchSize: 100
          enabled: true

Функция срабатывает в конечном итоге (через 2-5 секунд после отправки сообщения), но не сразу.Это по замыслу?Можно ли предположить, что потоки данных кинезиса не подходят для (почти) управляемой событиями архитектуры в реальном времени?

Что на самом деле запускает лямбду, когда триггер является потоком кинезиса?Похоже, что каждые 1-2 секунды происходит периодический фоновый опрос, лямбда срабатывает, если в потоке обнаруживаются новые сообщения.

1 Ответ

0 голосов
/ 25 сентября 2019

У вас установлен размер пакета 100, который говорит Lambda прочитать 100 записей перед вызовом вашей функции.

Существует 2 настройки, относящиеся к пакету.

  • Размер партии - количество записей, которые можно прочитать с сегмента в каждой партии, до 10 000.Лямбда передает все записи в пакете в функцию за один вызов, если общий размер событий не превышает предел полезной нагрузки для синхронного вызова (6 МБ).
  • Окно пакета -Укажите максимальное количество времени для сбора записей перед вызовом функции, в секундах.

Перед вызовом вашей функции Lambda продолжает читать записи из потока до тех пор, пока не соберет полный пакет, или доСрок действия окна пакета истекает.

Я не проводил тестирование производительности с этими настройками 2, но я бы начал с установки моего размера на 1 и моего окна на 0. Однако при запуске большого количестваЛямбда, но это должно дать вам минимально возможную задержку.

...