为什么我的 Kinesis 数据流在限流?

上次更新时间:2020 年 3 月 27 日

为什么我的 Amazon Kinesis 数据流在限流?

简短描述

即使您的指标并未超出 Kinesis 数据流配额,您的数据流也可能因下列原因而限流:

  • WriteThroughputExceeded 和 Rate Exceeded 错误。
  • 增强 Kinesis 流监控被禁用。
  • CloudWatch 指标中存在隐藏的微观峰值。
  • CloudWatch 指标仅报告成功的操作,但排除了任何失败的操作。

解决方法

您的 Amazon Kinesis 数据流可能会因下列原因限流:

WriteThroughputExceeded 和 Rate Exceeded 错误

您的流可能产生 WriteThroughputExceeded 和 Rate Exceeded 限流错误,其原因可能如下:

  • 写入该 Amazon Kinesis 数据流的记录数超过了流配额。
  • 记录的大小超过 1MB(包括分区键)。
  • 总吞吐量(字节数)超过了 Kinesis 流限制。
  • 创建器发出了太多写入流的快速请求,这通常会出现错误“Slow down”或“Rate exceeded”。

增强 Kinesis 流监控被禁用

Kinesis 数据流中某些分片收到的记录数量可能高于其他分片。这可能会导致流中出现限流错误,进而触发分片过载(也称为热分片)。热分片表示 PUT 操作中使用的分区键未在 Kinesis 流中的分片之间平均分配记录。

如果开启了 disable-enhanced-monitoring 功能,则指标中可能会隐藏热分片。这是因为流级别指标是所有显示的分片的聚合值。如果增强监控流被禁用,则您无法分别检查任何流。要按分片检查流,请使用 enable-enhanced-monitoring 命令。

CloudWatch 指标中存在隐藏的微观峰值

Kinesis 流配额是以分片和秒为单位确定的。如果相关值相加的总和超过 CloudWatch 中的 60 秒时间限制,则可能出现违反 Kinesis 时间配额的微观峰值。此外,由于指标是按 60 为单位进行聚合的,因此一分钟内的记录总数可能看起来较低,但该分钟内某一秒的记录实际上是一个更高的数字。虽然流量可能显示它低于流配额,但该秒被限流的分片则会显示流受到限制。

CloudWatch 指标仅报告成功的操作,但排除了失败的操作

Kinesis 指标仅记录流中的成功操作。因此,被限流的操作可能未被提取到 Kinesis 数据流中。这可能导致超出流限制和限流,但没有任何指标指示。

如果存在未进入 Kinesis 数据流的失败记录,则流将会限流。如果创建器中存在重试机制,则失败的记录将会再次尝试。这也可能会导致处理延迟。

要检查是否正在将太多的记录发送到 Kinesis 数据流,请计算发送的记录总数。将传入的记录总数与被限流的记录数量相加,即可得出此值,从而总体了解在发生限流事件期间传入的记录数。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?