我已经阅读了一些关于kinesis shard和多个消费者的问题,但我仍然不明白它是如何工作的。
我的用例:我只有一个碎片我有一个kinesis流。我想使用不同的lambda函数来使用这个分片,每个函数都是独立的。这就像每个lambda函数都有自己的shard迭代器。
有可能吗?设置从同一个流/分片读取的多个lambda使用者(基于流)?
答案 0 :(得分:3)
嘿Magalhaes先生,我相信以下图片可以回答您的一些问题。
为澄清起见,您可以在运动学流上将多个lambda设置为使用者,但是lambda在处理时会相互阻塞。如果您的流只有一个分片,那么它将只有一个并发的Lambda。
答案 1 :(得分:2)
如果你有一个kinesis流,你可以通过事件源映射连接任意数量的lambda函数。
所有函数将同时运行并完全相互独立,并且如果新记录到达流中,将不断调用。 碎片的数量无关紧要。
答案 2 :(得分:1)
是的,没问题!
分片数量并不限制流可以拥有的消费者数量。 在这种情况下,它只会限制每个lambda的并发调用次数。这意味着对于每个使用者,您只能拥有并发执行的分片数。
有关详细信息,请参阅this doc。
答案 3 :(得分:1)
对于单个lambda函数: “对于处理Kinesis或DynamoDB流的Lambda函数,分片的数量是并发单位。如果您的流中有100个活动分片,则最多将同时运行100个Lambda函数调用。这是因为Lambda按顺序处理每个分片的事件。 ”。 [https://docs.aws.amazon.com/lambda/latest/dg/scaling.html]
但是,要绑定运动学的lambda消费者数量没有限制。
答案 4 :(得分:0)
简短答案:
是的,它将同时运行。
长答案:
Kinesis流中共享的每个读吞吐量为2MiB / sec: https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html
如果您有多个应用程序(在您的情况下为Lambda)。他们将共享吞吐量。 从上面的链接获得的描述:
每个分片以每秒2 MiB的速度固定。如果有多个消费者从同一个分片中读取数据,那么他们都将共享此吞吐量。他们从分片接收的吞吐量之和不超过2 MiB / sec。
如果创建(写入)的数据少于1mib / sec,则应该能够用一个分片支持两个“应用程序”。
通常,如果您有Y个分片和X个应用程序,则假定您的总写吞吐量(mib /秒)小于2mib /秒* Y / X并且数据在分片之间平均分配,则它应该可以正常工作。
如果您要求每个“应用程序”每个使用2 Mib / sec,则可以启用“增强型扇出的消费者”,它“扇出”流,从而为每个应用程序每个分片提供专用的2 Mib / sec(代替共享吞吐量)。
在以下链接中对此进行了描述: https://docs.aws.amazon.com/streams/latest/dev/introduction-to-enhanced-consumers.html
在Amazon Kinesis Data Streams中,您可以构建使用称为增强型扇出功能的使用者。此功能使使用者可以从流中接收记录,每个分片每秒的吞吐量高达2 MiB。此吞吐量是专用的,这意味着使用增强型扇出的使用方不必与从流中接收数据的其他使用方竞争。