2015-12-11 13 views
1

我有一个应用程序,我只需要1 Kinesis碎片的带宽,但我需要并行的许多lambda函数调用以跟上记录处理。我的记录大小处于高端(其中一些侵入1000 KB限制),但传入速率仅为1 MB/s,因为我使用单个EC2实例来填充流。由于每条记录都包含一个内部时间戳,因此我不关心如何按顺序处理它们。基本上我有几个月的数据需要迁移,我想要并行执行。如果记录顺序无关紧要,我可以使用单个Kinesis碎片并行调用Lambda函数吗?

的处理记录提供能够处理1000个并发客户端,所以我以前的解决办法是我的Kinesis流拆分成50个碎片数据库集群记录。然而,这已经证明是昂贵的,因为我需要的碎片是并行处理。我使用的带宽不到1%,我不得不增加保留期。

长期来看,我想答案涉及分裂我的记录起来,让消费时间不生产时间如此巨大的倍数。目前这不是一种选择,但我意识到我正在滥用这个系统。

有没有一种方法,我可以有一个单一的Kinesis碎片流相关的一个保序拉姆达功能,让它异步调用另一个lambda功能上一批记录?然后我可以使用一个Kinesis碎片(或其他数据源),并仍然可以享受大规模并行处理。

真的所有我需要的是在室壁运动拉姆达事件源配置的选项,说:“我不关心保存这些记录的顺序。”但是,我认为在失败的执行过程中跟上迭代器的位置变得更具挑战性。

+0

你可以链接你的lambda函数吗?第一个函数将获得元事件,它将主要将其分割为可以触发另一个lambda函数的较小事件。第二个lambda函数可以并行触发。 – Guy

+0

我相信是这样,但现在我需要将我的记录缓存在方便的地方(如DynamoDB)以正确处理故障并重试,并且由于lambda函数不能超过300秒,所以我无法使用长时间运行的orchestrator函数,所以它必须生存到期(并重新调用)。 –

+0

这取决于您可能具有的错误类型。例如,如果您的数据中含有“毒丸”,那么您只是想把它们丢掉。你也可以考虑让一连串的Kinesis流作为你的中间缓冲机制。另一种机制是针对这些例外的“死信队列”,这在Kinesis或SQS中也取决于这些错误的频率。 – Guy

回答

相关问题