2013-10-01 95 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的必要時排隊,但這不是通用解決方案)。