当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda和Kinesis客户端库(KCL)

柯波峻
2023-03-14

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

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

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

为什么我找不到任何使用KCL和Lambda的人。这里的问题是什么?

共有2个答案

赵驰
2023-03-14

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

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

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

让我们从Lambda开始。lambda是设计的,短暂的。他们可以(也将)在一天中不断地上下旋转。当然,你可以设置一个取暖方案,让Lambda保持不动,但它们仍然具有短暂的特性,这完全是你无法控制的。换言之,AWS控制lambda何时以及是否保持活动状态,并且没有发布具体的方法。所以你只能试着保持温暖。

KCL做什么?

  • 连接到流

看完这个列表后,现在让我们回到lambdas短暂的本质。这意味着每次lambda上升或下降时,所有这些工作都需要进行。这包括在碎片和工作者之间进行完全的重新平衡,从流中提取数据记录,设置检查点,等等。您还需要确保不会有比碎片数量更多的lambda,因为它们将一文不值(在最好的情况下永远不要使用,在最坏的情况下永远不要注册为工作者,否则可能会导致消息丢失。想想在这种情况下,通过重新平衡会发生什么。)

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

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

班言
2023-03-14

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

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

 类似资料:
  • 根据AWS文件: worker使用Java ExecutorService任务调用记录处理器方法。如果任务失败,工作进程将保留对记录处理器正在处理的碎片的控制。工作进程启动一个新的记录处理器任务来处理该碎片。有关详细信息,请参阅阅读节流。 根据AWS文件的另一页: Kinesis客户端库(KCL)依靠您的进程记录代码来处理处理数据记录时出现的任何异常。从进程记录抛出的任何异常都被KCL吸收。为了避

  • 我想了解何时从worker调用IRecordProcessor的processRecords方法。如果我之前对processRecords的调用尚未完成,那么worker会调用下一个processRecords吗?worker将开始从kinesis获取新记录,还是等待当前记录完成执行。 基本上,如果processRecords在外部db中保存记录时出现异常,我会等待很长时间,因为db关闭或出现其他

  • 我有一个使用KCL 2. x从Kinesis消费记录的应用程序,不同流分片中存在的数据格式不同,我想使用具有不同配置的不同KCL消费者单独处理它们。例如,如果我在Kinesis流中有3个分片,我将为不同的分片生成3个具有不同配置的不同消费者,即每个分片1个消费者。当我创建多个消费者时,我面临的问题是,如果我通过java Code配置3个不同的消费者,那么他们中的任何一个都在所有分片上出现租赁锁,而

  • 这里在github上发布的DynamoDB Streams Kinesis Adaptor具有此功能,并带有以下注释: Kinesis模型在父分片合并的情况下提供相邻的父分片ID。由于DynamoDB Streams不支持合并,因此始终返回null。 我对此感到担忧,我将使用7个碎片的示例来描述我的担忧,为了简单起见,让我们将它们命名为0到6。 由于保留策略,0的父级不再可用,1、2、3、4、5是

  • 我正在使用amazon kinesis连接器构建一个kinesis客户端应用程序。我正在想一些关于它的事情。 KCL如何确保负载平衡和扩展。例如,我有一个有一个碎片的流,很多记录/事件被放置在一整天或特定时间的15分钟内。那么,它将如何处理这种突然的交通和负载。

  • 问题内容: 我正在寻找GraphQL 的Java 客户端 库。两者均用于Java中的服务器到服务器通信。没有android,没有javascript …只是java。Apollo是最接近的答案,似乎仅适用于Android,而不适用于纯Java应用程序。有很多关于用Java构建服务器的例子,没有关于客户端的例子。任何想法?谢谢! 问题答案: 有几个可用的客户,都采用不同的方法。 Apollo And