Как написать С++ носик/болт для использования Storm and Thrift в Storm

Взято из здесь: Storm с самого начала разрабатывался для совместимости с несколькими языками. Nimbus — это сервис Thrift, а топологии определяются как структуры Thrift. Использование Thrift позволяет использовать Storm на любом языке.

Я вижу, что топология, созданная в java, развертывается путем сериализации топологии (носики, болты, ComponentCommon) как типы данных Thrift, а затем развертывается на Nimbus. В Java легко сериализовать объект с его методами и данными. Так что, с другой стороны, Nimbus просто нужно создавать объекты и вызывать их. (может быть, здесь я упускаю детали, но надеюсь, что правильно понял)

Но мне интересно, как написать топологию на C++ и развернуть ее таким же образом. Помогает ли бережливость сериализовать топологию на основе С++, а Nimbus развертывает/выполняет топологию так же, как для Java?

Я видел ссылки link1 link2 в этом отношении, и кажется, что единственным решением является использование Shelbolt. который вызывает процесс и взаимодействует с ним через стандартный ввод-вывод.

Чтобы использовать метод Thrift, нужно ли нам переписывать ядро ​​storm также на C++? Также зачем использовать Thrift, если он поддерживает только языки JVM? Похоже, что Thrift вообще не используется для таких языков, как python/c++.


person weima    schedule 01.10.2013    source источник


Ответы (1)


Я не уверен, правильно ли я понял ваш вопрос - в моем понимании вы спрашиваете Is it possible [without the Shebolt hack] to use Storm [with Thrift as comm protocol] with C++-written bolts and with C++ as the language that creates the topology.

Из-за отсутствия других ответов на этот вопрос и на основе моих собственных исследований я предполагаю, что для вашей проблемы нет готовой, пригодной для использования реализации.

Поэтому, если вам действительно нужно использовать Storm (его общий вариант использования — JVM, поэтому даже если он теоретически может работать с любым языком, это не означает, что существует экосистема для других языков) и C++, у вас нет другого выбора, кроме как использовать взломайте Shebolt или модифицируйте Thrift самостоятельно.

Как вы знаете, Thrift также был перенесен на C++. Поэтому можно перестроить вызовы API на C++. По сути, вам нужно портировать Java TopologyBuilder. Что касается C++, вы можете начать с учебника Thrift C++.

Это тоже своего рода хак, так как вы просто перестраиваете половину стека (в данном случае поверх Thrift), но в целом у вас очень мало других вариантов с таким дизайном системы, как Storm. Например, бинарный протокол MySQL был перестроен из-scr.

Если кто-то не сделал эту работу за вас (которую я бы полностью пропустил в своем исследовании), я не вижу другого выхода, кроме как сделать это самостоятельно (может быть, даже storm не лучший инструмент для вашего случая!?)

Если для вас достаточно другого хака (который может быть еще более сложным и, возможно, даже медленнее), кроме ShellBolt, вы можете попробовать запустить JVM изнутри C++, например. см. эту запись SO. Я бы не рекомендовал это.

Если вам нужна альтернативная распределенная очередь задач, у меня есть хороший опыт работы с Celery в средах Python, однако у меня нет опыта использования его напрямую в C++ (обычно я управляю Python с помощью ZeroMQ или пишу свои собственные очереди на основе ZeroMQ, где это необходимо, но это не универсальное решение).

person Uli Köhler    schedule 25.01.2014