Запись идет в одну точку входа во время ввода кинезита (то есть конечной точки API Kinesis). Затем данные помещаются на осколке в потоке относительно ключа раздела.
Вы не можете решить, какой именно осколок данные поступают напрямую; но вы можете поместить разные записи в один и тот же осколок, если вы выбираете один и тот же ключ раздела (если вы не изменяете размер потока). Из-за алгоритма осколки, предоставленный partition_key хэшируется, и затем выбирается один из всех доступных осколков.
Например,
- Предположим, вы ввели запись # 1 в поток с разделом_key "asd".
- Если вы вставляете другую запись # 2, # 3 и т. Д. С той же разделительной клавишей («asd»), вы можете быть уверены, что все значения будут размещены в одном и том же обтекателе потока.
- Но если вы выберете partition_key как «qwe», поставив свою запись №4, то может быть в том же осколке, что и другие.
Связанные страницы документа: http://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream
Но если вы действительно настаиваете на том, «1 запись мультиплексированной в каждый осколок», есть путь;
- Попробуйте создать несколько случайных разделительных_секунд и передать их значение в поток.
- Запустите приложение-потребитель и посмотрите, какой осколок доставил какое значение.
- Затем сопоставьте ключи разделов, которые вы использовали для отправки каждой записи с соответствующим осколком.
Итак, теперь вы знаете, какой ключ из разделов использовать при отправке данных на конкретный осколок, вы можете использовать эту карту во время передачи этих специальный «мультиплексировать» запись ...
Это Hacky и грубой силы, но это сработает.
Также см предыдущего ответа по поводу ключей разделов и осколков: https://stackoverflow.com/a/31377477/1622134
Надеется, что это помогает.
PS: Если вы используете API-интерфейсы Kinesis низкого уровня и создаете пользовательский запрос PutRecord, в ответе вы можете найти, какой осколок данных помещается. PutRecordResponse содержит информацию shardId;
http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html
Слово «потребитель» в вашем вопросе расплывчато. Вы имеете в виду «каждое потребительское приложение» или «каждая рабочая нить, слушая осколок в одном приложении»? – az3