Parallel processing 如果记录顺序不为';没关系吧?

Parallel processing 如果记录顺序不为';没关系吧?,parallel-processing,aws-lambda,amazon-kinesis,Parallel Processing,Aws Lambda,Amazon Kinesis,我有一个应用程序,我只需要1个kinisis shard的带宽,但我需要许多并行的lambda函数调用来跟上记录处理。我的记录大小是高端的(其中一些超出了1000 KB的限制),但传入速率只有1 MB/s,因为我使用单个EC2实例来填充流。因为每个记录都包含一个内部时间戳,所以我不关心按顺序处理它们。基本上,我有几个月的数据需要迁移,我想并行迁移 经过处理的记录为一个数据库集群提供了记录,该集群可以处理1000个并发客户端,因此我以前的解决方案是将我的Kinesis流拆分为50个碎片。然而,这已

我有一个应用程序,我只需要1个kinisis shard的带宽,但我需要许多并行的lambda函数调用来跟上记录处理。我的记录大小是高端的(其中一些超出了1000 KB的限制),但传入速率只有1 MB/s,因为我使用单个EC2实例来填充流。因为每个记录都包含一个内部时间戳,所以我不关心按顺序处理它们。基本上,我有几个月的数据需要迁移,我想并行迁移

经过处理的记录为一个数据库集群提供了记录,该集群可以处理1000个并发客户端,因此我以前的解决方案是将我的Kinesis流拆分为50个碎片。然而,这已经证明是昂贵的,因为我所需要的碎片就是并行处理。我使用的带宽不到1%,我不得不延长保留期

从长远来看,我想答案是将我的记录拆分,这样消耗的时间就不会是生产时间的巨大倍数。现在这不是一个选项,但我意识到我有点滥用这个系统

有没有一种方法可以让一个保序lambda函数与一个碎片运动流关联,并让它在一批记录上异步调用另一个lambda函数?然后我可以使用一个单独的Kinesis shard(或其他数据源),并且仍然享受大规模并行处理

实际上,我所需要的只是在Kinesis的Lambda事件源配置中的一个选项,即“我不关心保存这些记录的顺序”。但我想,在执行失败时跟上迭代器的位置变得更具挑战性。

,可以将多个Lambda函数附加到同一Kinesis流。也就是说,我现在正在测试它,但没有成功

编辑:


它工作正常。

您能链接lambda函数吗?第一个函数将获取元事件,它将主要将其拆分为较小的事件,您可以使用这些事件触发另一个lambda函数。第二个lambda函数可以并行触发。我相信是这样的,但现在我需要将记录缓存在方便的地方(比如DynamoDB),以正确处理失败和重试,而且由于lambda函数的寿命不能超过300秒,我无法拥有长时间运行的orchestrator函数,因此它必须在过期(并被重新调用)后生存。这取决于您可能遇到的错误类型。例如,如果您的数据中有“毒丸”,您只需将其扔掉即可。你也可以考虑将一系列的运动流作为中间缓冲机制。另一种机制是一个“死信队列”,这些例外,也在KyScript或SqS中,取决于这些错误的频率。例如,使用Elastic Beanstalk和SQS作为辅助环境()与使用kinesis的lambda非常相似,但可能更适合您的用例。当通过事件方法调用Lambda时,您会遇到另一个问题。也就是说,在该场景中,有效负载大小有128 KB的限制,因此我们真正能够直接传递给lambda的信息是关于从何处获取实际有效负载的信息(例如,S3存储桶和密钥).据我所知,kinesis维护数据记录的顺序,因此,如果有多个lambda使用来自单个碎片的数据,那么kinesis如何为您工作?你能详细说明一下吗。