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 实例上运行。需要由大型创建器提供较高吞吐量的客户通常会关注每记录延迟。处理延迟的策略包括以下内容:如果客户可以对记录进行微批处理/缓冲,请在使用单记录操作之前使用 K inesis Producer 库(具有高级聚合逻辑)PutRecords、多记录操作或将记录聚合到更大的文件中。PutRecord如果无法批处理/缓冲,则使用多个线程来同时写入到 Kinesis Data Streams 服务。 Amazon SDK for Java 和其他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密钥的权限,请参阅中的使用密钥策略 Amazon KMS使用IAM策略 Amazon KMS

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