2014-01-03 7 views
7

Я использую Storm (java) с Cassandra.Подключение базы данных штормовых болтов

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

Скорость записи приложения очень быстрая. Болт нужно запускать несколько раз в секунду, а производительности препятствует тот факт, что он каждый раз подключается к Кассандре.

Он работал бы намного быстрее, если бы у меня было статическое соединение, которое было открыто, но я не уверен, чтобы добиться этого в шторме.

Для выяснения вопроса:

что объем статической связи в топологии ливневой?

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

+2

Этот вопрос был проголосован без комментариев, это смешно, пожалуйста, спросите меня, для получения дополнительной информации, если это то, что требуется. – girlcoder

+0

спасибо, кто когда-либо проголосовал за него 0 – girlcoder

+0

Большинство драйверов соединения Cassandra/клиентов. Я не думаю, что вам нужно держать ваше соединение открытым. – Chiron

ответ

9

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

Не совсем верно сказать, что штурмовые болты получают instantiated each time, которые они вызвали. Например, метод prepare вызывается только во время фазы инициализации i.e только один раз. из документа указывается
Он вызывается, когда задача для этого компонента инициализируется внутри рабочего на кластере. Он обеспечивает болт средой, в которой выполняется болт.

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

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


cleanup метод вызывается, когда IBolt будет завершение работы, документация говорит

Там нет гарантирую, что очистка будет называться, потому что супервизор убить -9-х рабочих процессов в кластере.Один контекст , где очистка является гарантированную называться это когда топология убит когда работает Буря в локальном режиме

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

Что касается соединения с БД, я не совсем уверен в ваших случаях использования, поскольку вы не поместили какой-либо код, но поддержание пула ресурсов звучит как хороший выбор для меня.

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