Какой надзиратель будет слушать через носик?

В моей топологии у меня есть носик с открытым сокетом на порту 5555 для приема сообщений.

Если в моем кластере Storm есть 10 супервизоров, будет ли каждый из них прослушивать свои порты 5555?

В конце концов, какому руководителю я должен отправлять сообщения?


person PedroD    schedule 04.04.2016    source источник
comment
похоже, вам нужно использовать опрос вместо нажатия или использовать другой дизайн, такой как средний человек / фунт..   -  person Mzf    schedule 05.04.2016


Ответы (1)


Несколько комментариев здесь:

  • Storm использует модель на основе извлечения данных для приема данных через Spouts. Если вы откроете сокет, вы заблокируете носик до тех пор, пока данные не будут доступны (и это плохо; см. этот вопрос SO для получения более подробной информации: Почему я не должен зацикливаться или блокировать в Spout.nextTuple())
  • About Spout deployment (Supervisors):
    • first, it depends on the parallelism of your spout (ie,parallelims_hint, default value is one)
    • во-вторых, супервизоры не выполняют код Spout: супервизоры запускают рабочую JVM, которая выполняет Spouts/Bolts (топологию см. в параметре конфигурации number_of_workers)
    • в-третьих, Storm использует циклический планировщик с балансировкой нагрузки; таким образом, может случиться так, что два исполнителя Spout запланированы на одну и ту же рабочую JVM (или на разных рабочих на одном хосте); в этом случае вы получите конфликт портов (только один запуск сможет открыть порт)
  • В этом случае датировка не имеет значения: если вы действительно используете push, вы можете выбрать любой хост для отправки данных; Шторму все равно. Конечно, если вам нужно какое-то разделение на основе ключей, вы можете захотеть отправить данные из одного раздела в один экземпляр Spout; в качестве альтернативы просто перешлите данные в Spout и используйте fieldsGrouping, чтобы получить разделы для потребляющего Bolt. Однако, если вы используете прием данных на основе извлечения с помощью Spout, вы можете убедиться, что каждый Spout извлекает данные из определенных разделов, и проблема решается естественным образом.

Подводя итог: использование приема данных на основе push может быть плохой идеей.

person Matthias J. Sax    schedule 07.04.2016