Streaming 风暴动态拓扑

Streaming 风暴动态拓扑,streaming,apache-storm,Streaming,Apache Storm,Storm支持动态拓扑吗?我想从中获得的功能是在Storm拓扑运行时根据用户需求动态更改拓扑。例如,当用户想知道流的前10个单词时,我使用前10个螺栓来处理它,当用户想知道其他内容时,我使用另一个螺栓来处理流并“拔下”前10个螺栓 我知道这可以通过对流进行分区或复制流来完成,并始终运行所有功能,只演示我们需要的数据,或者我们可以关闭流并更新另一个拓扑,但有没有“热插件”方法可以做到这一点?你不能直接更改Storm拓扑的结构,即,修改喷嘴和螺栓接线。Storm拓扑的布线始终是静态的 但是,您可以用

Storm支持动态拓扑吗?我想从中获得的功能是在Storm拓扑运行时根据用户需求动态更改拓扑。例如,当用户想知道流的前10个单词时,我使用前10个螺栓来处理它,当用户想知道其他内容时,我使用另一个螺栓来处理流并“拔下”前10个螺栓


我知道这可以通过对流进行分区或复制流来完成,并始终运行所有功能,只演示我们需要的数据,或者我们可以关闭流并更新另一个拓扑,但有没有“热插件”方法可以做到这一点?

你不能直接更改Storm拓扑的结构,即,修改喷嘴和螺栓接线。Storm拓扑的布线始终是静态的


但是,您可以用前面描述的其他方式实现所需的功能。依我看,最好的、最合乎逻辑的方法是运行多个拓扑结构——以防数据处理差别很大。但是,如果两种情况下的大多数处理过程相似,只需复制源流并在同一拓扑的不同分支中处理数据。

没有内置的方法来实现这一点(将一个螺栓切换到另一个螺栓),但您可以编写一个螺栓,根据它接收的输入执行任意代码。只要您的输入和输出在storm中具有相同的结构(发出相同的元组),理论上您就可以在运行时在bolt中执行您想要的任何操作。如果您使用Clojure构建bolt,这尤其容易,但基本上在Storm中可以使用的每种语言中都可以实现


然而,这可能没有多大意义,因为您要进行的大多数计算都涉及多个螺栓,并有助于传递不同结构的元组。正如schiavuzzi在他们的回答中所说的,如果你想对一个流进行多个独立的计算,那么最好运行多个拓扑。

对于热部署,eBay提供了一个新的流媒体平台。
Jetstream:.

它有一个内置的配置管理工具,您的配置位于mongodb中。当用户修改配置bean时,该工具将向zookeeper发布通知,相应的JetStream应用程序将收到通知并动态更改配置,该配置于2015年6月3日添加到STORM-561上: