AWS Lambda和Kinesis客户端库(KCL)

时间:2018-11-12 18:12:46

标签: aws-lambda amazon-kinesis

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

它确实提供了一种很好的实现,用于跟踪您在流上的位置(检查点)。

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

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

2 个答案:

答案 0 :(得分:4)

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

打开lambda,在处理程序中初始化KCL,并在lambda运行时等待事件,这将是非常奇怪的。 Lambda将在5分钟内下降,您将再次执行相同的操作。从EC2实例执行此操作很有意义,但是您需要自己重新实现Lambda-Kinesis集成。那就是Lambda,在幕后。

答案 1 :(得分:2)

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

首先,要运行KCL,需要运行JVM。这意味着您只能使用Java在Lambda中执行此操作,因为(据我目前的了解),无法将其他SDK,运行时等导入Lambda。您在安装时选择了一个运行时。因此,他们已经只为Java lambda创建文档了。

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

让我们从Lambda开始。 Lambda是临时设计的。他们可以(并且将)全天不断旋转和下降。当然,您可以设置一个变暖方案,以使lambda停留下来,但是它们仍然具有短暂的特性,这完全不受您的控制。换句话说,AWS控制lambda何时以及是否保持活动状态,以及确切的方法不会发布。因此,您只能尝试保持温暖。

KCL的作用是什么?

  • 连接到流
  • 枚举分片
  • 与其他工人(如果有)协调分片关联
  • 针对其管理的每个分片实例化记录处理器
  • 从流中提取数据记录
  • 将记录推送到相应的记录处理器
  • 检查点处理的记录
  • 当工作人员实例计数更改时,使shard-worker关联保持平衡
  • 在拆分或合并碎片时平衡shard-worker关联

通读此列表后,现在让我们回到lambda的短暂性质。这意味着,每当lambda上升或下降时,所有这些工作都需要发生。这包括分片和工作程序之间的完全重新平衡,从流中提取数据记录,设置检查点等。您还需要确保旋转的lambda不会超过分片的数量。一文不值(最好不要使用,或者在最坏的情况下都不要注册为工人,这可能会导致丢失消息。请考虑这种情况下的重新平衡。)

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

如果此处有任何不正确的地方,请告诉我,以便我进行更新。谢谢,希望对您有所帮助。