Интеграция Apache Storm со средой Spring - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в Apache Storm. В настоящее время я работаю над устаревшим проектом, который включает некоторую потоковую обработку с использованием Apache Storm. Я хочу интегрировать текущий проект с Spring. Я нашел пару комментариев ( Интеграция Storm и Spring 4 , http://mail-archives.apache.org/mod_mbox/storm-user/201605.mbox/%3CCAMwbCdz7myeBs+Z2mZDxWgqBPfjcq-tynOz_+pmPrm@6 .gmail.com% 3E ) говорит, что есть проблемы с этим. Может кто-нибудь объяснить мне, как сделать такую ​​интеграцию или почему это невозможно?

1 Ответ

0 голосов
/ 03 мая 2018

Справедливое предупреждение, я не использовал Spring в Storm, так что это основано исключительно на моих знаниях Storm и использовании Spring в не-Storm проектах, то есть на самом деле это просто догадки.

Я думаю, что вы можете использовать Spring с Storm, но есть некоторые предостережения, о которых вы должны знать. Стоит ли использовать Spring с учетом этих предостережений, решать только вам.

В отличие от, например, Spring MVC-приложение Spring не будет отвечать за создание экземпляров объекта или выполнение приложения. Storm не знает о Spring, и когда вы запускаете топологию, это будет Storm, который вызывает ваши методы работы с болтами / носиками. Это означает, что вы должны знать, что некоторые части вашего приложения будут вызываться вне контекста Spring.

Вот мое предположение, где вы могли бы использовать Spring на разных этапах развертывания топологии.

  • Когда вы настраиваете свою топологию и отправляете ее (весь ваш код до StormSubmitter.submitTopology включительно), вы, скорее всего, можете использовать Spring так же, как и в любом автономном приложении Java. например Вы можете запустить свое приложение, как в в этом примере , и поместить все свои документы и код подключения в Main.start. Все конструкторы болтов / изливов будут работать на этом этапе, так что вы можете использовать здесь автоматическое подключение, если хотите. Вы должны убедиться, что ваши носики и болты являются сериализуемыми.

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

Еще раз повторю: если вы решите запустить контекст Spring внутри своих работников, вы должны знать, что методы spout / bolt будут вызываться Storm вне контекста Spring.

...