如何排查 Kinesis Data Streams 中的限流错误问题?

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

我的 Amazon Kinesis 数据流出现限流情况。但是,数据流并没有超出数据限制。如何检测“Rate Exceeded”或“WriteProvisionedThroughputExceeded”错误? 

简短描述

要检测并排查 Kinesis 数据流中的限流错误,您可以执行以下操作:

  • 启用增强监控并比较 IncomingBytes 的值。
  • 记录完整的日志以执行流计数和大小检查。
  • 使用随机分区键。
  • 检查 Amazon CloudWatch 指标中的模糊指标或微峰值。

解决方法

要防止 Kinesis 数据流中出现“Rate Exceeded”或“WriteProvisionedThroughputExceeded”错误,请尝试以下操作:

启用增强监控并比较 IncomingBytes 的值

要验证是否有热分区,请启用对您的 Kinesis 数据流的增强监控。当您在 Kinesis 数据流中启用分区级别的监控时,便可以单独对各个分区进行调查。您可以检查每个分区的数据流,以确定哪些分区接收的流量更多或违反了任何服务限制。

注意:禁用增强监控设置后,热分区通常从 Kinesis 数据流指标中排除。有关热分区的更多信息,请参阅重新分区策略

此外,您还可以比较 IncomingBytes 的平均值和最大值,以验证流中是否存在热分区。如果启用了增强监控,您还可以看到具体是哪些分区偏离了平均值。

记录完整的日志以执行流计数和大小检查

为了确定违反流限制的微峰值或模糊指标,请记录完整的日志或自定义代码,以执行流计数和大小检查。然后,评估发送到 Kinesis 数据流的记录的数量及大小。这可帮助您确定任何违反数据限制的峰值。

您也可以获取一分钟的数据点,然后将该值除以 60。这样可以得到每秒的平均值,有助于确定指定时间段内是否存在限流。如果成功的计数未违反限制,则将 IncomingRecords 指标添加到 WriteProvisionedThroughputExceeded 指标,然后重新计算。IncomingRecords 指标表示成功或接受的记录数量,而 WriteProvisionedThroughputExceeded 指标表示受到限制的记录数量。

注意:检查生产者发送的记录的大小和数量。如果传入记录和受到限制的记录的总和大于流限制,则考虑更改记录的数量。

PutRecord.Success 指标也是表示失败操作的一个良好指标。如果成功指标下降,则调查数据生产者日志,以找出失败的根本原因。如果发生限流,请在数据生产者端建立日志记录,以确定所提交记录的总数和大小。如果 PutRecord.Success 指标中的记录总数违反了流限制,您的 Kinesis 数据流将出现限流。有关 Kinesis 流限制的更多信息,请参阅 Kinesis Data Streams 配额

使用随机分区键

如果您的 Kinesis 数据流中有热分区,请使用随机分区键提取您的记录。如果操作已经使用了随机分区键,则调整该键以纠正分配情况。然后,监控该键以了解 IncomingBytes IncomingRecords 等指标的变化。如果最大值和平均值很接近,则表示没有热分区。

检查 Amazon CloudWatch 指标中的模糊指标或微峰值

如果有 CloudWatch 指标未明确指示数据中的违反情况或微峰值,请尝试以下解决方法:

有关流配额的更多信息,请参阅 Kinesis Data Streams 配额