2013-10-01 55 views
10

here: Storm从一开始就设计为与多种语言兼容。 Nimbus是Thrift服务,拓扑定义为Thrift结构。 Thrift的使用允许Storm从任何语言中使用。如何在风暴和节俭风暴中使用C++ spout/bolt

我看到在java中创建的拓扑通过将拓扑(喷嘴,螺栓,ComponentCommon)作为Thrift数据类型序列化,然后部署到Nimbus上来部署。在Java中,使用它的方法和数据序列化对象是很容易的。所以在另一边,Nimbus只需要创建对象并调用它们。 (我可能会错过这里的细节,但我希望我能正确理解这一点)

但我想知道如何在C++中编写拓扑并以相同的方式进行部署。节俭是否有助于序列化基于C++的拓扑,并且Nimbus是否以与Java相同的方式部署/执行拓扑?

我已经看到链接link1link2在这方面,唯一的解决方案似乎是使用Shelbolt。它调用该进程并通过标准I/O与它进行通信。

为了使用Thrift方式,我们是否需要在C++中重写风暴核心?此外,为什么在仅支持JVM语言时使用Thrift? Thrift似乎没有用于python/C++等语言。

回答

4

我不确定我是否正确理解您的问题 - 根据我的理解,您要求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。如你所知,节俭本身也被移植到C++中。因此可以在C++中重新构建API调用。基本上,你需要端口the Java TopologyBuilder。在C++端,你可以开始with the Thrift C++ tutorial

这也是某种黑客行为,因为基本上只是重建堆栈的一半(在这种情况下是Thrift的ontop),但通常情况下,使用Storm等系统设计的其他选项很少。 例如,MySQL二进制协议已经被重建 - 除非有人为你做了这项工作(我完全错过了我的研究),否则我看不出有什么选择,而不是自己做(甚至可能是风暴是不是你的用例最好的工具!?)

如果除了ShellBolt之外的其他黑客(它可能更复杂,甚至更慢)对你来说足够好,你可以尝试从C++内部启动一个JVM,例如见this SO post。我不会推荐这个。

如果您需要一个替代的分布式任务队列,我在Python环境中对Celery有很好的经验,但是我没有直接在C++中使用它的经验(我通常使用ZeroMQ控制Python,或者编写自己的基于ZeroMQ的必要时排队,但这不是通用解决方案)。