Amazon Kinesis Data Streams 产生器问题排查 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Kinesis Data Streams 产生器问题排查

产生器应用程序的写入速率比预期的慢

写入吞吐量低于预期的最常见原因包括:

超过服务限制

要查明是否超过了服务限制,请检查您的创建器是否从服务引发了吞吐量异常,并验证哪些 API 操作受限制。请记住,根据调用会有不同的限制,具体请参阅限额和限制。例如,除了最广为人知的对读写操作的分片级别限制之外,还存在以下流级别的限制:

操作 CreateStreamDeleteStreamListStreamsGetShardIteratorMergeShards 限制为每秒 5 个调用。DescribeStream 操作限制为每秒 10 个调用。DescribeStreamSummary 操作限制为每秒 20 个调用。

如果这些调用不存在问题,请确保您选择了允许在所有分片之间均匀分配 put 操作的分区键,并且没有某个特殊分区键无意中达到了服务限制而其他分区键则未达到限制。这要求您衡量高峰吞吐量并考虑流中的分片数量。有关管理流的详细信息,请参阅创建和管理 Kinesis 数据流

提示

请记住,使用单记录操作 PutRecord 时,将吞吐量节流计算值向上舍入到最接近的 KB 值;使用多记录操作 PutRecords 时,对各个调用中记录的累积总和进行舍入。例如,带有 600 个 1.1 KB 大小记录的 PutRecords 请求不会受到限制。

我想优化我的产生器

在您开始优化产生器之前,请完成以下关键任务。首先,根据记录大小和每秒记录数,确定您需要的高峰吞吐量。接下来,排除流容量作为限制因素 (超过服务限制) 的可能性。如果您已排除了流容量,对于两种常见类型的创建器,请使用以下故障排除提示和优化指南。

大型创建器

大型创建器通常从本地服务器或 Amazon EC2 实例运行。需要由大型创建器提供较高吞吐量的客户通常会关注每记录延迟。处理延迟的策略如下:如果客户可以微量批处理/缓冲记录,则使用 Amazon Kinesis Producer Library(具有高级聚合逻辑)、多记录操作 PutRecords,或者先将记录聚合到较大的文件中,再使用单记录操作 PutRecord。如果无法批处理/缓冲,则使用多个线程来同时写入到 Kinesis Data Streams 服务。适用于 Java 的 Amazon SDK 和其他开发工具包中包括异步客户端,可以用非常少的代码完成此任务。

小型创建器

小型创建器通常是移动应用程序、IoT 设备或 Web 客户端。如果是移动应用程序,我们建议使用 PutRecords 操作或 Amazon Mobile 开发工具包中的 Kinesis 记录器。有关更多信息,请参阅《Amazon Mobile SDK for Android 入门指南》和《Amazon Mobile SDK for iOS 入门指南》。移动应用程序自身必须处理断续连接,并且需要某种类型的批量 put,例如 PutRecords。如果由于某些原因而无法批处理,请参阅上面的大型创建器信息。如果您的创建器是浏览器,则生成的数据量通常非常小。不过,您将 put 操作放在了应用程序的关键路径上,我们建议不要这样做。

滥用 flushSync() 操作

使用 flushSync() 不当会严重影响写入性能。flushSync() 操作专为关闭场景而设计,用于确保在 KPL 应用程序终止之前发出所有缓冲记录。如果在每次写入操作后都执行此操作,则可能会增加大量额外的延迟,每次写入延迟约 500 毫秒。请确保仅在应用程序关闭时实现 flushSync(),以避免写入性能产生不必要的额外延迟。

我收到了未授权的 KMS 主密钥权限错误

当创建者应用程序在 KMS 主密钥上写入加密流但没有权限时,会发生此错误。要为应用程序分配权限以访问 KMS 密钥,请参阅 Using Key Policies in Amazon KMSUsing IAM Policies with Amazon KMS

排查产生器的其他常见问题