Как написать crow spout/bolt на использование Storm and Thrift в Storm

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

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

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

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

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

Ответ 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 (его обычная usecase - это JVM, поэтому, даже если она теоретически может работать с любым языком, это не означает, что существует экосистема для других языков) и С++, у вас нет опции но использовать взломать Shebolt или модифицировать Thrift самостоятельно.

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

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

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

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

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