Apache Storm — использовать несколько носиков?

Итак, я пытаюсь настроить носик для чтения из очереди Amazon SQS. Теперь мне нужна ситуация, в которой я могу распределить нагрузку между несколькими носиками.

Я понимаю, что возможно иметь несколько потоков, но могу ли я иметь два или более разных экземпляра/приложения spout, которые читают из одной очереди и отправляют в одну и ту же топологию? Например. Носик A и носик B считывают данные с SQS, а затем оба излучают на болт C?


person SarthakDev    schedule 05.01.2015    source источник


Ответы (2)


Конечно, у вас может быть несколько носиков, но вы должны определить их соответствующим образом, чтобы предотвратить двойную отправку одного и того же элемента (или ваша топология допускает это по дизайну). Например, несколько процессов одного и того же элемента подразумевают плохие счетчики.

Проверьте параллелизм Storm в качестве запуска с исполнителями (потоками) и задачами (экземплярами) на носик / болт и выберите нужное количество.

В своем коде вы должны быть уверены, что не управляете одними и теми же кортежами дважды или более, либо вы делаете это перед штормом (очередь, которая не принимает один и тот же элемент дважды, который обрабатывается/очищается многими носиками, например , или несколько очередей — по одной на каждый носик, остерегайтесь транзакций) или вы делаете это в storm (обрабатываете сообщения только с параметром x в одном носике, с параметром y в другом и сообщение не может быть x и y одновременно).

person zenbeni    schedule 05.01.2015
comment
Спасибо. Разве Storm не работает на кластерной основе? То есть, если на инстансе с ip x.x.x.A работает Storm, он запускает и Spouts, и Bolts? Должен быть способ децентрализовать это? - person SarthakDev; 05.01.2015
comment
@SarthakDev да. Шторм решает, какой болт / носик к какому рабочему. Вы не можете установить его явно. Насколько я знаю, он использует хеш-функцию мода для распределения задач (экземпляров) болтов / носиков в воркерах кластера. Иногда это несбалансировано (вы можете проверить это в пользовательском интерфейсе Storm), поэтому чем больше у вас воркеров, тем лучше вы можете равномерно распределить нагрузку, например, вы можете решить иметь более 1 воркера на оборудование, чтобы предотвратить немного плохую балансировку. . - person zenbeni; 05.01.2015

Очередь SQS -----> Носик (количество исполнителей N).

Эта модель вполне подойдет. как только любой экземпляр исполнителя получит сообщение, сообщение станет невидимым для SQS.

Сохраняйте время невидимости сообщения Намного выше, чем время обработки сообщения в топологии Storm.

Вы можете сохранить логику удаления сообщения SQS внутри метода ack.

person kartik    schedule 07.01.2015