Я пытаюсь поделиться этой задачей между несколькими носиками. У меня есть ситуация, когда я получаю один кортеж/сообщение за раз из внешнего источника, и я хочу иметь несколько экземпляров носика, основной целью является разделение нагрузки и повышение эффективности работы.Storm-Kafka несколько носиков, как разделить нагрузку?
Я могу сделать то же самое с одним носиком, но я хочу разделить нагрузку на несколько носиков. Я не могу получить логику для распространения нагрузки. Поскольку смещение сообщений не будет известно до тех пор, пока конкретный носик не закончит потреблять часть (т. Е. На основе установленного размера буфера).
Может ли кто-нибудь рассказать о ярком свете о том, как разработать логику/алгоритм?
Advance Спасибо за ваше время.
Обновления в ответ на ответы:
Теперь многопарные перегородки на Кафке (т.е.
5
)
Ниже приводится код, используемый:
builder.setSpout("spout", new KafkaSpout(cfg), 5);
Испытано затоплением с 800 MB
данных по каждому разделу и этим взял ~22 sec
, чтобы закончить чтение.
Опять же, используется код с parallelism_hint = 1
т.е. builder.setSpout("spout", new KafkaSpout(cfg), 1);
Теперь потребовалось более ~23 sec
! Зачем?
Согласно Сторм Docs setSpout() декларации заключается в следующем:
public SpoutDeclarer setSpout(java.lang.String id,
IRichSpout spout,
java.lang.Number parallelism_hint)
где
parallelism_hint - количество задач, которые должны быть назначены для выполнения этой носик. Каждая задача будет выполняться в потоке в процессе где-то вокруг кластера.
Ох ... вы отправлены богом. Вы спасли мою жизнь. У меня было 5 разделов kafka, и я установил parallelism_hint из 3 в setSpout() и задавался вопросом, почему моя топология читается только из 3 разделов kafka после того, как параметр parallelism_hint решил 5 решить мою проблему. Спасибо за указание на это. – Shams