在运动流消息 (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/