Как написать c ++ spout / bolt для использования Storm и Thrift в Storm

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

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

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

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

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

10

Решение

Я не уверен, правильно ли я понимаю ваш вопрос — в моем понимании вы спрашиваете 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 ++, у вас нет выбора, кроме как использовать Шеколт взломать или модифицировать Thrift самостоятельно.

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

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

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

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

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

4

Другие решения

Других решений пока нет …