AWS Lambda和Kinesis Client Library (KCL)

8
为什么我很少能够找到使用KCL与AWS Lambda的示例?它提供了一个良好的实现,用于跟踪流上的位置(检查点)。我想将KCL用作消费者。我的设置是具有多个分片的流。在每个分片上,都有一个Lambda在消耗。我希望在Lambda中使用KCL来跟踪迭代器在分片上的位置。为什么我找不到任何人使用KCL与Lambda?问题出在哪里?

你是想将Lambda用作消费者还是生产者?如果你想将其用作消费者,那么Kinesis可以配置为Lambda事件源。 - Jamie Starke
@JamieStarke,作为一个消费者。我更新了问题。 - xtra
@JamieStarke,是的,它可以配置为Lambda事件源。另一方面,我没有找到使用KCL和Lambda的人的示例。我只是读到它们实际上并不经常一起使用。但我从未读过原因。 - xtra
2个回答

10
由于您可以直接使用Kinesis作为事件源在Lambda中消费数据,所以使用KCL(Kinesis Client Library)没有任何意义。AWS构建的事件源框架肯定会使用类似KCL的东西来响应Kinesis事件并启动Lambda。
在Lambda运行时启动Lambda、初始化KCL并等待事件是很奇怪的。Lambda将在5分钟内关闭并且您需要再次执行相同的操作。如果在EC2实例上执行此操作,则有意义,但这样您将自己重新实现Lambda-Kinesis集成。这就是Lambda背后的原理。

7
我不在AWS工作,所以我显然不知道为什么没有文档,但是以下是我的想法。首先,要运行KCL,您需要运行JVM。这意味着您只能在使用Java的lambda中执行此操作,因为(据我所知)没有办法将其他SDK、运行时等引入lambda。您在设置时选择一个运行时。因此,他们只会为Java lambda创建文档。现在是更技术性的原因。您需要考虑Lambda正在做什么,以及KCL正在做什么。让我们从Lambda开始。Lambda是短暂的。它们可以(并将)在一天中持续不断地启动和关闭。当然,您可以设置预热方案,使lambda保持活动状态,但它们仍将具有短暂的本质,这完全超出了您的控制范围。换句话说,AWS控制lambda何时以及是否保持活动状态,而确切的方法未公布。因此,您只能尝试保持温暖。 KCL是做什么的?连接到流、枚举分片、与其他工作进程协调分片关联、为其管理的每个分片实例化记录处理器、从流中拉取数据记录、将记录推送到相应的记录处理器、设置已处理记录的检查点、在工作器实例计数更改时平衡分片-工作器关联、在分片拆分或合并时平衡分片-工人关联。阅读完这个列表后,让我们回到Lambda的短暂本质。这意味着每次lambda启动或关闭时,所有这些工作都需要完成。这包括在分片和工作进程之间进行完全重新平衡、从流中拉取数据记录、设置检查点等。您还需要确保永远不会有比分片数更多的lambda启动,因为它们将是无用的(在最好的情况下从未使用或在最坏的情况下注册为工作者,可能导致消息丢失。想象一下在重新平衡的情况下会发生什么。) 好吧,从技术上讲,如果您使用Java,并尽力保持lambda温暖,那么技术上可能是可能的。但是回到您的问题。为什么没有文档?通常来说,由于Lambda短暂的本质,Lambda并不是使用KCL的最佳用例。如果您不深入研究KCL的工作原理,可能会错过某些内容,从而导致重新平衡问题,并潜在地导致消息丢失。如果有任何不准确的地方,请告诉我,以便我进行更新。谢谢,希望这对某人有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接