风暴动态拓扑

时间:2013-10-14 03:48:47

标签: streaming apache-storm

Storm支持动态拓扑吗?我想要的功能是在Storm拓扑运行时根据用户需求动态更改拓扑。例如,当用户想要知道流的前10个单词时,我使用前10个螺栓来处理它,当用户想要知道别的东西时,我使用另一个螺栓来处理流并“拔出”前10名螺栓。

我知道可以通过对流进行分区或复制流并且一直运行所有功能并仅演示我们想要的数据来完成,或者我们可以关闭流并更新另一个拓扑,但是有一个'热插拔 - 以这种方式做到这一点?

4 个答案:

答案 0 :(得分:4)

您不能动态改变Storm拓扑的结构,即修改喷口和螺栓接线。 Storm拓扑的布线始终是静态的。

但是,您可以通过您已描述的其他方式实现所需的功能。恕我直言,最好的,最合理的方式是运行多种拓扑 - 如果数据处理差别很大。但如果大多数处理在两种情况下都相似,只需复制源流并处理同一拓扑的不同分支中的数据。

答案 1 :(得分:1)

没有内置方法可以做到这一点(将一个螺栓换成另一个螺栓),但你可以做的是编写一个螺栓,根据它接收的输入执行任意代码。只要你的输入和输出在风暴中具有相同的结构(发出相同的元组),理论上你可以在你的螺栓中执行你想要的任何运行时。如果你在Clojure中构建你的螺栓,这一点特别容易,但基本上你可以使用Storm的所有语言都可以。

然而,这可能没有多大意义,因为你想要做的大多数计算涉及多个螺栓并且适合于传递不同结构的元组。正如schiavuzzi在他们的回答中已经说过的那样,如果你想对流进行多次独立计算,你最好还是运行多种拓扑。

答案 2 :(得分:1)

它被添加到STORM-561,03 / Jun / 15:

https://issues.apache.org/jira/browse/STORM-561

答案 3 :(得分:0)

对于热门部署,eBay有一个新的流媒体平台 Jetstream:https://github.com/pulsarIO/jetstream
它有一个内置的配置管理工具,你的配置位于mongodb。当用户修改配置bean时,该工具会将通知发布到zookeeper,相应的JetStream应用程序将收到通知并动态更改配置