本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Kinesis Data Streams 产生器问题排查
以下主题提供了 Amazon Kinesis Data Streams 产生器常见问题的解决方案:
产生器应用程序的写入速率比预期的慢
写入吞吐量低于预期的最常见原因包括:
超过服务限制
要查明是否超过了服务限制,请检查您的创建器是否从服务引发了吞吐量异常,并验证哪些 API 操作受限制。请记住,根据调用会有不同的限制,具体请参阅限额和限制。例如,除了最广为人知的对读写操作的分片级别限制之外,还存在以下流级别的限制:
操作 CreateStream
、DeleteStream
、ListStreams
、GetShardIterator
和 MergeShards
限制为每秒 5 个调用。DescribeStream
操作限制为每秒 10 个调用。DescribeStreamSummary
操作限制为每秒 20 个调用。
如果这些调用不存在问题,请确保您选择了允许在所有分片之间均匀分配 put 操作的分区键,并且没有某个特殊分区键无意中达到了服务限制而其他分区键则未达到限制。这要求您衡量高峰吞吐量并考虑流中的分片数量。有关管理流的详细信息,请参阅创建和管理 Kinesis 数据流。
提示
请记住,在使用单记录操作 PutRecord 时,吞吐量限制计算会向上舍入到最接近的 KB 值,而多记录操作 PutRecords 对各个调用中记录的累加和进行舍入。例如,带有 600 个 1.1 KB 大小记录的 PutRecords
请求不会受到限制。
我想优化我的产生器
在您开始优化产生器之前,请完成以下关键任务。首先,根据记录大小和每秒记录数,确定您需要的高峰吞吐量。接下来,排除流容量作为限制因素 (超过服务限制) 的可能性。如果您已排除了流容量,对于两种常见类型的创建器,请使用以下故障排除提示和优化指南。
大型创建器
大型生产者通常在本地服务器或 Amazon EC2 实例上运行。需要由大型创建器提供较高吞吐量的客户通常会关注每记录延迟。处理延迟的策略包括以下内容:如果客户可以对记录进行微批处理/缓冲,请在使用单记录操作之前使用 Amazon Kinesis Producer 库(具有高级聚合逻辑)PutRecords、多记录操作或将记录聚合到更大的文件中。PutRecord如果无法批处理/缓冲,则使用多个线程来同时写入到 Kinesis Data Streams 服务。 适用于 Java 的 Amazon SDK 和其他 SDKs 包括异步客户端,它们只需很少的代码即可完成此操作。
小型创建器
小型创建器通常是移动应用程序、IoT 设备或 Web 客户端。如果是移动应用程序,我们建议在移动设备中使用该PutRecords
操作或Kinesis Recorder。 Amazon SDKs有关更多信息,请参阅《 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 KMS 和 Using IAM Policies with Amazon KMS。