运动数据流不是实时的?

kinesis data stream is not real time?

获得了在运动流消息上触发的函数 (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).
  • 批次window – 指定收集记录的最长时间 在调用函数之前,以秒为单位。

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

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