为什么我在使用 Kinesis 数据流时会遇到高延迟问题?

1 分钟阅读
0

我想知道为什么我的 Amazon Kinesis 数据流在获取数据记录时延迟很高。

简短描述

如果每个 GET 请求的记录数或记录大小增加,GetRecords.Latency 可能会增加。如果您在生产者向流中提取数据时重新启动应用程序,记录可能会累积而不会被消耗。随着记录数或要获取的数据量增加,GetRecords.Latency 的值也会增加。如果应用程序无法赶上提取速率,IteratorAge 会增加。

**注意:**在 Kinesis 数据流上启用服务器端加密会增加延迟。

解决方法

使用 Amazon CloudWatch 监控 Kinesis 数据流服务。查看 CloudWatch 指标(如 GetRecords.Latency),验证延迟是否持续增加。如果延迟持续增加,检查 CloudWatch 中的 IncomingRecordsIncomingBytesGetRecords.RecordsGetRecords.Bytes 指标是否也有所增加。随着数据量增加,这些指标会增加,导致高延迟。之所以出现这种增加,是因为当 Kinesis 数据流中有更多可用记录时,GetRecords 会提取更多记录。

如果您的 IteratorAge 也有所增加,可能会有更多 IncomingBytes 进入流。查看 CloudWatch 中的 IncomingBytes 指标,验证字节数是否增加。您可以检查对流的 GetRecords 调用是否减少。有更多传入字节表明,每次 GetRecords 调用都会检索更多数据,增加 GetRecords.Latency 值。

如果您继续观察到高延迟(即使 IncomingBytesIncomingRecords 没有增加),说明可能有太多传入数据。如果使用者应用程序无法赶上传入数据,数据将继续在 Kinesis 数据流中累积。即使您重新启动应用程序,在每次 GetRecords 调用中也会获取更多记录。记录数或每次 GetRecords 调用获取的数据量增加,会导致 GetRecords.Latency 的值增加。

要解决此问题,请完成以下任务:

  • 检查您的应用程序,看看是否进行了足够的 GetRecords 调用来处理传入的数据量。如果您作为消费者使用 Amazon Kinesis Client Library(KCL)应用程序或 AWS Lambda,则应增加数据流中的分片数量。分片数量增加会增加传输流的消耗率,并降低 IteratorAgeGetRecords.Latency 值。
  • 应延长 Kinesis 数据流的保留期以避免任何数据丢失。较长的保留期可帮助您的应用程序处理积压的数据。
  • 如果您有消费者应用程序,则检查处理逻辑并记录处理时间。
  • 检查系统的中央处理单元(CPU)和内存利用率,看看是否需要释放更多内存。
AWS 官方
AWS 官方已更新 1 年前