10

这里开始:Storm 从一开始就被设计为兼容多种语言。Nimbus 是一个 Thrift 服务,拓扑被定义为 Thrift 结构。Thrift 的使用允许从任何语言使用 Storm。

我看到通过将拓扑(spouts、bolts、ComponentCommon)序列化为 Thrift 数据类型来部署在 java 中创建的拓扑,然后部署在 Nimbus 上。在 Java 中,很容易序列化对象及其方法和数据。所以另一方面 Nimbus 只需要创建对象并调用它们。(我可能在这里遗漏了细节,但我希望我理解正确)

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

在这方面,我已经看到了链接link1 link2,唯一的解决方案似乎是使用 Shelbolt。它调用进程并通过标准 i/o 与它通信。

为了使用 Thrift 方式,我们是否需要在 C++ 中也重写storm core?另外,当 Thrift 仅支持 JVM 语言时,为什么还要使用它?Thrift 似乎根本不用于 python/c++ 等语言。

4

1 回答 1

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。

如您所知,thrift 本身也已移植到 C++。因此,可以在 C++ 中重新构建 API 调用。基本上,您需要移植JavaTopologyBuilder。在 C++ 方面,您可以从Thrift C++ 教程开始。

这也是一种 hack,因为您基本上只是重建了一半的堆栈(在这种情况下是在 Thrift 之上),但一般来说,对于 Storm 这样的系统设计,您几乎没有其他选择。例如 MySQL 二进制协议已经从-scr 重建

除非有人为您完成了这项工作(我在研究中会完全错过),否则我认为除了自己做之外别无选择(甚至可能风暴不是您用例的最佳工具!?)

如果除了 ShellBolt 之外的另一个 hack(可能更复杂甚至更慢)对您来说已经足够好了,您可以尝试从 C++ 内部启动 JVM,例如,请参阅此 SO 帖子。我不会推荐这个。

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

于 2014-01-25T19:53:52.263 回答