【问题标题】:Set a timeout-delay before batch batch execution for AWS Kinesis在批量执行 AWS Kinesis 之前设置超时延迟
【发布时间】:2020-02-05 16:10:23
【问题描述】:

我正在使用 AWS Kinesis(使用无服务器框架配置)并且我正在使用 batchSize of 1

processEvents:
    handler: ...
    events:
      - stream:
          type: kinesis
          batchSize: 1
          arn:
            Fn::GetAtt: [KinesisStream, Arn]

有没有办法将 超时 设置为 20 秒,例如,在读取下一批之前?

我想在每个 lambda 执行之前有一个时间延迟,基本上从流中提取一条记录。

谢谢!

【问题讨论】:

    标签: aws-lambda serverless-framework amazon-kinesis


    【解决方案1】:

    您的 Lambda 由 Kinesis 同步调用,只有在 Lambda 返回成功时才会进行下一个事件。

    这些情况让您有机会自己在 Lambda 代码中编写延迟。

    await new Promise(done => setTimeout(done, 20000))
    processMyEvent(event)
    

    如果批量大小为 1,此 Lambda 必须先完成,然后才能运行下一个事件。

    请注意,额外的 Lambda 运行时间会产生成本。

    您也可以换个方向,执行您的实际代码,然后延迟关闭您的 Lambda。如果您的处理在运行时间上有所不同,您甚至可以使用上下文对象来查看 Lambda 已经运行了多长时间。

    最后,我建议更改您的架构。除了产生的额外成本外,您还人为地减慢了您的平台速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2019-02-28
      相关资源
      最近更新 更多