2016-01-19 6 views
2

У меня есть поток Amazon Kinesis, состоящий из нескольких осколков. Количество осколков и, следовательно, количество потребителей не является постоянным.Amazon-Kinesis: Положите запись на каждый осколок

Существует редкий тип событий, который я хочу передать каждому потребителю в потоке.

Есть ли способ для продюсера транслировать запись, т. Е. Обнаруживать осколки и записывать запись на каждом из них?

+0

Слово «потребитель» в вашем вопросе расплывчато. Вы имеете в виду «каждое потребительское приложение» или «каждая рабочая нить, слушая осколок в одном приложении»? – az3

ответ

1

Запись идет в одну точку входа во время ввода кинезита (то есть конечной точки 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 запись мультиплексированной в каждый осколок», есть путь;

  1. Попробуйте создать несколько случайных разделительных_секунд и передать их значение в поток.
  2. Запустите приложение-потребитель и посмотрите, какой осколок доставил какое значение.
  3. Затем сопоставьте ключи разделов, которые вы использовали для отправки каждой записи с соответствующим осколком.

Итак, теперь вы знаете, какой ключ из разделов использовать при отправке данных на конкретный осколок, вы можете использовать эту карту во время передачи этих специальный «мультиплексировать» запись ...

Это Hacky и грубой силы, но это сработает.

Также см предыдущего ответа по поводу ключей разделов и осколков: https://stackoverflow.com/a/31377477/1622134

Надеется, что это помогает.

PS: Если вы используете API-интерфейсы Kinesis низкого уровня и создаете пользовательский запрос PutRecord, в ответе вы можете найти, какой осколок данных помещается. PutRecordResponse содержит информацию shardId;

http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html

 Смежные вопросы

  • Нет связанных вопросов^_^