有一个在运动学流消息上触发的函数(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条记录。
有两个与批处理相关的设置。
在调用函数之前,Lambda继续从流中读取记录,直到它收集了完整的批次,或者直到批次窗口到期为止。
我还没有使用这2个设置进行性能测试,但首先要将我的大小设置为1,将窗口设置为0。但是,启动大量Lambda可能会产生副作用,但是应该给您最小的可能会延迟。