【问题标题】:AWS Lambda and Kinesis Client Library (KCL)AWS Lambda 和 Kinesis 客户端库 (KCL)
【发布时间】:2019-04-15 12:13:07
【问题描述】:

为什么我发现这么少的 KCL 与 AWS Lambda 一起使用的示例。 https://docs.aws.amazon.com/streams/latest/dev/developing-consumers-with-kcl.html

它确实提供了一个很好的实现来跟踪您在流中的位置(检查点)。

我想将 KCL 用作消费者。我的设置是一个包含多个分片的流。在每个分片上,一个 Lambda 正在消耗。我想使用 Lambda 中的 KCL 来跟踪迭代器在分片上的位置。

为什么我找不到将 KCL 与 Lambda 一起使用的人。 这里有什么问题?

【问题讨论】:

  • 您打算将 Lambda 用作消费者还是生产者?如果您希望将其用作消费者,可以将 Kinesis 配置为 lambda 事件源。
  • @JamieStarke ,作为消费者。我更新了问题。
  • @JamieStarke,是的,它可以配置为 lambda 事件源。另一方面,我没有找到使用 KCL 和 Lambda 的人的例子。我只读到它们并没有真正一起使用的事实。但我从来没有读过为什么。

标签: aws-lambda amazon-kinesis


【解决方案1】:

由于您可以在 lambda 中直接从 Kinesis 消费(使用 Kinesis 作为事件源),因此在 lambda 中使用 KCL 没有任何意义。 AWS 构建的事件源框架必须使用 KCL 之类的东西来启动 lambda 以响应 kinesis 事件。

调出一个 lambda,在处理程序中初始化 KCL 并在 lambda 运行时等待事件是非常奇怪的。 Lambda 将在 5 分钟内关闭,您将再次执行相同的操作。从 EC2 实例执行此操作是有道理的,但随后您将自己重新实现 Lambda - Kinesis 集成。这就是 Lambda,在幕后。

【讨论】:

    【解决方案2】:

    我不为 AWS 工作,所以显然我不知道没有文档的确切原因,但这是我的想法。

    首先,要运行 KCL,您需要运行 JVM。这意味着您只能使用 Java 在 lambda 中执行此操作,因为(据我目前所知)无法将其他 sdk、运行时等引入 lambda。您在设置时选择了一个运行时。所以他们已经只会为 java lambdas 创建文档了。

    现在是出于更技术性的原因。您需要考虑 lambda 在做什么,然后是 KCL 在做什么。

    让我们从 Lambda 开始。 Lambda 是设计的,是短暂的。他们可以(并且将会)全天持续地旋转和下降。当然,您可以设置一个升温方案,让 lambda 保持不变,但它们仍然具有短暂的性质,这完全超出了您的控制。换句话说,AWS 控制 lambda 何时以及是否保持活动状态,并且未发布用于此的确切方法。所以你只能尽量保持温暖。

    KCL 有什么作用?

    • 连接到流
    • 枚举分片
    • 协调与其他工作人员的分片关联(如果有)
    • 为其管理的每个分片实例化一个记录处理器
    • 从流中提取数据记录
    • 将记录推送到相应的记录处理器
    • 检查点处理记录
    • 在工作程序实例计数发生变化时平衡分片工作程序关联
    • 在分片拆分或合并时平衡分片工作者关联

    阅读完此列表后,现在让我们回到 lambda 的短暂性。这意味着每次 lambda 上升或下降时,所有这些工作都需要发生。这包括分片和工作人员之间的完全重新平衡、从流中提取数据记录、设置检查点等。您还需要确保启动的 lambdas 永远不会超过分片的数量。毫无价值(在最好的情况下永远不会使用或在最坏的情况下注册为工人,这可能会导致消息丢失。想想在这种情况下重新平衡会发生什么。)

    好的,从技术上讲,你能做到吗?如果你使用 Java 并且尽你所能保持你的 lambdas 温暖,这在技术上是可能的。但回到你的问题。 为什么没有文档?我从来不想说“从不”,但一般来说,Lambda 具有短暂的性质,并不是 KCL 的最佳用例。如果您不深入了解 KCL 的工作原理,您可能会遗漏一些东西,从而导致重新平衡问题并可能导致消息丢失。

    如果这里有任何不准确的地方,请告诉我,以便我更新。谢谢,我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2021-03-14
      • 2017-12-11
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多