amazon-web-services - 运动数据流不是实时的?

标签 amazon-web-services aws-lambda serverless-framework amazon-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 秒),但不会立即触发。这是设计使然吗?我可以假设运动数据流不适合(近)实时事件驱动架构吗?

当触发器是运动流时,究竟是什么触发了 lambda?看起来每隔 1-2 秒就会进行一次后台定期轮询,如果在流中发现新消息,则会触发 lambda。

最佳答案

您将批量大小设置为 100,这会告诉 Lambda 在调用您的函数之前读取 100 条记录。

批量相关的设置有2个。

  • 批量大小——从每个分片中读取的记录数 批处理,最多 10,000 个。 Lambda 将批处理中的所有记录传递给 该函数在一次调用中,只要 事件不超过同步调用的负载限制(6 MB)。
  • 批处理窗口 – 指定收集记录的最长时间 在调用函数之前,以秒为单位。

在调用您的函数之前,Lambda 会继续从流中读取记录,直到它收集到完整的批处理,或者直到批处理窗口到期。

我还没有用这 2 个设置进行性能测试,但我会首先将大小设置为 1,将窗口设置为 0。但是,启动大量 Lambda 可能会有副作用,但它应该会给你可能的最小延迟。

关于amazon-web-services - 运动数据流不是实时的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58091043/

相关文章:

amazon-web-services - 具有无服务器本地环境的 AWS Cognito

amazon-web-services - 是否可以从 AWS lambda 向 S3 存储桶发出 302 重定向请求以触发下载?

aws-cloudformation - 使用无服务器框架为多个 IoT 设备设置 AWS IoT

javascript - 如何将值从无服务器 yml 文件传递​​到 js 文件?

database - AWS DynamoDB - 如何设计一个表/索引来有效检索大量具有特定值/状态的项目

ios - AWS Cognito iOS 登录委托(delegate)方法 `didCompleteStepWithError ` 未调用

python - AWS Boto3 "TypeError: list indices must be integers or slices, not str"

aws-lambda - 如何使用@aws-cdk/pipelines 模块构造打包依赖项?获取错误 TS2307

serverless-framework - 如何在 serverless.ts 文件中设置 provider.apiGateway.shouldStartNameWithService?

amazon-web-services - AWS DynamoDB 中复合主键的分区部分是否有大小限制?