增加了Kinesis延迟,导致Lambda

时间:2015-08-04 10:07:51

标签: amazon-web-services amazon-kinesis aws-lambda

我们使用Kinesis作为Lambda的缓冲区,然后将其插入Redshift。 Lambda函数在S3中创建一个文件,并在Redshift中执行COPY以插入数据。我们看到Kinesis的数据出现非常高的延迟,我们担心这会导致超过24小时的数据被丢弃。我们目前有3个分片正在运行,并且没有接近我们的最大吞吐量。

在同一时间段,我们也看到进入Kinesis的数据量有所增加。但是,由于我们只使用了大约三分之一的写入吞吐量,因此我们不应该受到限制。任何Lambda或Redshift指标都没有波动。

附件显示我们的Kinesis流中的统计信息。可能导致这种情况发生的原因,我将如何解决这个问题呢?

Kinesis get requests

Kinesis get latency

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

最有可能发生的事情是你的lambda函数跟不上Kinesis的数据速率。 lambda函数与Kinesis事件流的工作方式有效,每个分片只附加一个(单核)lambda函数。所以你只有3个功能。

通过查看Kinesis上的iteratorAgeMilliseconds指标,您可以查看该功能是否落后。这一点,再加上看看lambda函数的平均执行持续时间和lambda事件源批量大小,可以让你很好地了解lambda函数每秒实际处理的数据量。 (Event source batch size) * (average size of each record) / (average duration of lambda invocation) * (number of shards) = total bytes/second processed。您可以使用它来确定需要多少片Kinesis才能跟上负载。

此外,您可能希望查看“扇出”设置,其中您有一个lambda函数从流中读取事件,然后直接使用事件调用另一个lambda函数。这可以让你远离lambda中的碎片亲和力。