如果记录顺序无关紧要,我可以使用单个 Kinesis 分片并行调用 Lambda 函数吗?
Can I invoke Lambda functions in parallel using a single Kinesis shard if record order doesn't matter?
我有一个应用程序,我只需要 1 个 Kinesis 碎片的带宽,但我需要并行调用许多 lambda 函数来跟上记录处理。我的记录大小处于高端(其中一些超出了 1000 KB 的限制),但传入速率仅为 1 MB/s,因为我使用单个 EC2 实例来填充流。由于每条记录都包含一个内部时间戳,因此我不关心按顺序处理它们。基本上我有几个月的数据需要迁移,我想并行进行。
处理后的记录为可以处理 1000 个并发客户端的数据库集群提供记录,因此我之前的解决方案是将我的 Kinesis 流拆分为 50 个分片。然而,事实证明这很昂贵,因为我需要分片的唯一目的是并行处理。我使用的带宽不到 1%,我不得不增加保留期。
从长远来看,我认为答案涉及拆分我的记录,这样消费时间就不会是生产时间的那么大倍数。现在这不是一个选项,但我意识到我在稍微滥用系统。
有没有办法让一个保序 lambda 函数与单分片 Kinesis 流相关联,并让它在一批记录上异步调用另一个 lambda 函数?然后我可以使用单个 Kinesis 分片(或其他数据源)并仍然享受大规模并行处理。
我真的只需要在 Lambda 事件源配置中为 Kinesis 提供一个选项 "I don't care about preserving order of these records." 但是我想在执行失败时跟上迭代器的位置变得更具挑战性。
According to somebody that works in AWS,可以将多个 Lambda 函数附加到同一个 Kinesis 流。也就是说,我目前正在测试它,但没有成功。
编辑:
它工作正常。
我有一个应用程序,我只需要 1 个 Kinesis 碎片的带宽,但我需要并行调用许多 lambda 函数来跟上记录处理。我的记录大小处于高端(其中一些超出了 1000 KB 的限制),但传入速率仅为 1 MB/s,因为我使用单个 EC2 实例来填充流。由于每条记录都包含一个内部时间戳,因此我不关心按顺序处理它们。基本上我有几个月的数据需要迁移,我想并行进行。
处理后的记录为可以处理 1000 个并发客户端的数据库集群提供记录,因此我之前的解决方案是将我的 Kinesis 流拆分为 50 个分片。然而,事实证明这很昂贵,因为我需要分片的唯一目的是并行处理。我使用的带宽不到 1%,我不得不增加保留期。
从长远来看,我认为答案涉及拆分我的记录,这样消费时间就不会是生产时间的那么大倍数。现在这不是一个选项,但我意识到我在稍微滥用系统。
有没有办法让一个保序 lambda 函数与单分片 Kinesis 流相关联,并让它在一批记录上异步调用另一个 lambda 函数?然后我可以使用单个 Kinesis 分片(或其他数据源)并仍然享受大规模并行处理。
我真的只需要在 Lambda 事件源配置中为 Kinesis 提供一个选项 "I don't care about preserving order of these records." 但是我想在执行失败时跟上迭代器的位置变得更具挑战性。
According to somebody that works in AWS,可以将多个 Lambda 函数附加到同一个 Kinesis 流。也就是说,我目前正在测试它,但没有成功。
编辑:
它工作正常。