Я использую модуль python для записи записей на AWS Kinesis. Максимальная достигнутая пропускная способность составляет около 40 штук в секунду. Однако согласно Kinesis FAQ:Низкая пропускная способность AWS Kinesis
Каждый осколок может поддерживать до 1000 записей PUT в секунду.
Так что мой нынешний подход достигает лишь 4% то, что теоретически возможно, что кажется очень низким.
Есть ли у кого-нибудь представление о том, как можно улучшить пропускную способность?
Настройка: поток Кинезиса - это экземпляр с одним осколком. Производитель находится в специальном экземпляре AWS EC2 (t3.medium) в том же регионе, что и Kinesis Stream. Он создает строки длиной около 20 символов и отправляет их в поток Kinesis через boto.kinesis.Connection.put_record("my_stream", my_message)
.
упрощенный код:
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")
Вы пробовали использовать метод насыпной, '' put_records''? Каждый HTTP-запрос на услугу включает в себя множество накладных расходов, поэтому максимальное количество данных для каждого звонка поможет повысить пропускную способность. Кроме того, выполняете ли вы загрузку с экземпляра EC2 в том же регионе? Это также поможет. – garnaat
@garnaat: Да, я объединил их вместе для отправки 100 сообщений одновременно через 'connection.put_records (message_list," my_stream ")', с 'message_list.append ({'Data': my_message, 'PartitionKey': str (я)}) '. Тем не менее, пропускная способность даже ** падает ** до 30 puts/sec. – ThS
Вы имеете в виду 30 баллов 100 записей в секунду? – garnaat