AWS Lambda 和 Kinesis 客户端库 (KCL)

xtr*_*tra 7 amazon-kinesis aws-lambda

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

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

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

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

CBP*_*CBP 7

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

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

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

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

KCL 是做什么的?

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

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

好吧,从技术上来说你能成功吗?如果您使用 Java 并且竭尽全力让 lambda 保持温暖,那么这在技术上是可能的。但回到你的问题。为什么没有文档?我从来不想说“永远”,但一般来说,Lambda 因其短暂性而并不是 KCL 的最佳用例。如果您不深入了解 KCL 的工作原理,您可能会错过一些东西,从而导致重新平衡问题并可能导致消息丢失。

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


Pra*_*eek 5

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

在 lambda 运行时启动 lambda、在处理程序中初始化 KCL 并等待事件将是非常奇怪的。Lambda 将在 5 分钟后停止运行,您将再次执行相同的操作。从 EC2 实例执行此操作是有意义的,但随后您将自己重新实现 Lambda - Kinesis 集成。这就是 Lambda 在幕后的作用。