Amazon web services AWS室壁运动的低吞吐量

Amazon web services AWS室壁运动的低吞吐量,amazon-web-services,boto,amazon-kinesis,Amazon Web Services,Boto,Amazon Kinesis,我使用python的模块向其写入记录。达到的最大吞吐量约为40次/秒。然而,根据该报告: 每个碎片每秒最多可支持1000条PUT记录 因此,我目前的方法仅达到理论上可能达到的4%,这似乎非常低 有人知道如何提高吞吐量吗 设置:Kinesis流是一个具有一个碎片的实例。生产者位于与Kinesis流位于同一区域的专用AWS EC2实例(t3.medium)上。它创建大约20个字符长度的字符串,并通过boto.kinisis.Connection.put\u record(“my\u Stream”,

我使用python的模块向其写入记录。达到的最大吞吐量约为40次/秒。然而,根据该报告:

每个碎片每秒最多可支持1000条PUT记录

因此,我目前的方法仅达到理论上可能达到的4%,这似乎非常低

有人知道如何提高吞吐量吗

设置:Kinesis流是一个具有一个碎片的实例。生产者位于与Kinesis流位于同一区域的专用AWS EC2实例(t3.medium)上。它创建大约20个字符长度的字符串,并通过
boto.kinisis.Connection.put\u record(“my\u Stream”,my\u message)
将其发送到Kinesis流

简化代码:

from boto import kinesis
import time

connection = kinesis.connect_to_region(REGION)
stream = connection.create_stream("my_stream", shard_count=1)
time.sleep(60)  # wait a minute until stream is created

for i in range(NUM_MESSAGES): 
    my_message = "This is message %d" % i
    connection.put_record(my_message, "my_stream", "partition_key")

限制为记录/秒 您应该使用putRecords来提高写入吞吐量。这样做的方式是在同一个调用中放置多个记录。所以你一直在追加,最后你把记录放进去



看看:

您是否尝试过使用批量方法,
put\u records
?对服务的每个HTTP调用都涉及大量开销,因此在每次调用中放入尽可能多的数据将有助于提高吞吐量。另外,您是否正在从同一区域内的EC2实例进行加载?这也会有帮助。@garnaat:是的,我将它们组合在一起,通过
连接一次发送100条消息。用
消息列表放置记录(消息列表,“我的流”)
。追加({'Data':我的消息,'PartitionKey':str(I)})
。但是,吞吐量甚至下降到每秒30次。你是说每秒100条记录30次?我在代码中发现了一个bug。在修复之后,消息现在真的聚集在一起了。结果:17次/秒,即1700次/秒。这更有意义。谢谢你的帮助@garnaat。你能分享一下什么是bug吗。。或者更新问题中的代码。这将有助于读者!我试过了,但吞吐量下降了。(参见OP中的注释)。我修复了代码中的一个bug,吞吐量现在达到1700 msg/秒。你的建议完全正确。谢谢(见我在作品中的评论)太棒了。很高兴我能帮助我们使用fluentd捕获、聚合事件并将其推送到kinesis