Я пытаюсь перекачивать много данных через Amazon Kinesis (порядка 10 000 точек в секунду).
Чтобы максимизировать количество записей в секунду через мои осколки, я хотел бы выполнять циклический перебор моих запросов по осколкам (логика моего приложения не заботится о том, к какому осколку отправляются отдельные сообщения).
Казалось бы, я мог бы сделать это с параметром ExplicitHashKey для сообщений в списке, который я отправляю в конечную точку PutRecords, однако документация Amazon фактически не описывает, как использовать ExplicitHashKey, кроме заявления оракула:
http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html
Каждая запись в массиве Records может включать необязательный параметр ExplicitHashKey, который переопределяет ключ раздела для сопоставления сегментов. Этот параметр позволяет производителю данных явно определять сегмент, в котором хранится запись. Дополнительную информацию см. В разделе Добавление нескольких записей с помощью PutRecords в Руководстве разработчика Amazon Kinesis Streams.
(В заявлении в документации выше есть ссылка на другой раздел документации, в котором вообще не обсуждается ExplicitHashKeys).
Есть ли способ использовать ExplicitHashKey для циклического перебора данных между шардами?
Какие допустимые значения параметра?
ExplicitHashKey
минимизировать количество разделов? Разве вы не хотите предоставить хорошийpartitionKey
, для которого kinesis сгенерирует MD5 и решит, в какой раздел он будет помещен? Допустим, у вас 2 раздела, и вы выбрали хорошийpartitionKey
. Затем Kinesis partitioner отправит эту запись в один из этих двух разделов на основе 128-битного значения. - person prayagupd   schedule 16.06.2017partitionKey
, чтобы он равномерно переходил вsequentialPartitionKey / np
. Для простоты предположим, что один раздел может записывать до 10 событий / 1000 мс. Для скорости 130 событий / 1000 мс, скажем, порядковые номера от 1 до 130, тогда будет ровно 10 событий1, 14, 27, 40, 53, 66, 79, 92, 105, 118
, идущих в раздел1, независимо от того, в каком порядке они обрабатываются, то же самое и с другими разделами. Похоже, вы на правильном пути, устанавливая свой собственный ключ раздела вместо хеша MD5. - person prayagupd   schedule 17.06.2017str( int( (( N%NUM_SHARDS )+0.5) * ( 2**128 / NUM_SHARDS ) ) )
выглядит интересно. - person prayagupd   schedule 29.06.2017