【问题标题】:Kinesis Analytics Destination Guidance: Lambda vs Kinesis Stream to LambdaKinesis Analytics 目标指南:Lambda 与 Kinesis Stream 到 Lambda
【发布时间】:2018-09-07 18:19:06
【问题描述】:

Kinesis Analytics 完成工作后,下一步就是将该信息发送到目的地。 AWS 目前提供 3 个目的地选择:

  • 运动流
  • Kinesis Firehose 传输流
  • AWS Lambda 函数

对于我的用例,Kinesis Firehose 交付流不是我想要的,所以我只剩下:

  • 运动流
  • AWS Lambda 函数

如果我将目标设置为 Kinesis Stream,然后我会将 Lambda 附加到该流以处理记录。

AWS 还提供了将目标设置为 Lambda 的功能,绕过了此过程的 Kinesis Stream 步骤。在对文档进行一些挖掘时,我发现了这一点:

Using a Lambda Function as Output

特别是在 Lambda 输出调用频率 下的那些文档中,它说:

如果记录作为连续查询或滑动窗口发送到数据分析应用程序内的目标应用程序内流,则 AWS Lambda 目标函数大约每秒调用一次。

我的 Kinesis Analytics 输出符合这种情况。所以我可以假设我的 Lambda 将被调用,“大约每秒一次”。

我试图了解使用这两个目的地与使用 Lambda 的区别。

Using AWS Lambda with Kinesis 声明:

您可以订阅 Lambda 函数以自动从 Kinesis 流中读取成批记录,并在流中检测到记录时对其进行处理。 AWS Lambda 然后定期(每秒一次)轮询流以获取新记录。

所以听起来调用间隔在任何一种情况下都是相同的;大约 1 秒。

所以我认为指导是:

如果管道中的下一阶段只需要一个消费者,则使用 AWS Lambda 函数 目标。但是,如果您需要使用多个不同的消费者对发送到目的地的相同数据执行不同的操作,则 Kinesis Stream 更合适。

这是关于如何选择目的地的正确假设吗?同样,对于我的用例,我排除了 Kinesis Firehose 交付流

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-kinesis


    【解决方案1】:

    如果管道中的下一阶段只需要一个使用者,则使用 AWS Lambda 函数目标。但是,如果您需要使用多个不同的消费者对发送到目的地的相同数据执行不同的操作,那么 Kinesis Stream 更合适。

    • 如果我希望在没有并发的情况下一项一项地使用这些项目,我将始终使用具有一个分片和批量大小 = 1 的 Kinesis Stream。

    如果有多个消费者,则增加分片的数量,当有项目需要处理时,为每个分片并行启动一个 lambda。如果有意义,还可以增加批量大小。

    但请再次阅读下面突出显示的短语:

    但是,如果您需要使用多个不同的消费者对发送到目的地的相同数据执行不同的操作,那么 Kinesis Stream 更合适。

    如果你有一个或多个生产者和许多消费者完全相同的项目,我猜你需要使用SNS。生产者将项目写入一个主题,然后所有监听该主题的 lambdas 将处理该项目。

    如果这不能回答您的问题,请澄清。有点模棱两可。

    【讨论】:

    • 啊...我实际上不知道它为每个分片分配 1 个 lambda。我以为 Lambda 会被触发,直到函数的并发限制或全局限制用完。
    • 我在 kinesis 文档中找不到参考,但我经常使用该功能。 一个分片 => 一个 lambda。我经常将 Kinesis Streams 用作消息队列,用于具有有限数量消费者的实时流。
    猜你喜欢
    • 2019-11-05
    • 2016-10-31
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2015-11-08
    • 2020-02-08
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多