阻止风暴:正确的方式

时间:2013-11-12 10:22:18

标签: java apache-storm

有没有一种干净的方法来阻止风暴而不用“杀死XXX”杀死它,其中XXX是PID?

我运行“storm kill topology-name”来杀死拓扑,但在那之后,是否有一种关闭工作人员,灵气,主管和ui的干净方法?

我没有在文档中找到任何与此相对应的命令:https://github.com/nathanmarz/storm/wiki/Command-line-client

4 个答案:

答案 0 :(得分:16)

命令杀死拓扑(正如你刚才提到的那样)

    storm kill topology-name

现在要关闭群集,您需要对每个节点运行以下命令

    sudo service supervisord stop

supervisord几秒钟关闭所有进程。请注意,当supervisord本身停止时尝试运行supervisorctl将导致错误消息(这似乎是supervisord 2.x中已知的用户界面问题)

来自this文档

  

如何杀死包括工作进程在内的所有Storm进程?当您停止群集时恰好正在运行的任何工作线程(由从属节点上的Supervisor守护程序启动)将继续运行。这是Storm的一个深思熟虑的设计决策,因为它意味着崩溃/重启Nimbus和Supervisor守护进程不会影响Storm中的任何运行拓扑。缺点是你必须付出额外的努力来完全停止集群中所有与Storm相关的进程。

    # If you want to kill ALL processes follow this procedure on the slave nodes:
    $ sudo supervisorctl stop storm-supervisor
    $ sudo pkill -TERM -u storm -f 'backtype.storm.daemon.worker'

答案 1 :(得分:2)

从您关联的页面:

  

     

语法:storm kill topology-name [-w wait-time-secs]

     

使用名称topology-name终止拓扑。 Storm将在拓扑的消息超时期间首先停用拓扑的spouts,以允许当前正在处理的所有消息完成处理。风暴将关闭工人并清理他们的状态。您可以使用-w标志覆盖Storm在停用和关闭之间等待的时间长度。

正如您所看到的,这旨在让您“干净”关机。 kill命令关闭了worker。

答案 2 :(得分:0)

好吧,如果你已经开始风暴./storm nimbus& ./storm supervisor& ./storm ui然后

之后你可能忘记了进程ID,在这种情况下,你可以使用jps工具找出pid然后杀死它们

$ JAVA_HOME / bin / jps

3201 ConsoleConsumer

7528 Jps

2966卡夫卡

3680 nimbus

3681主管

6749 Launcher

2669 QuorumPeerMain

首先杀死nimbus

$ sudo kill 3681

$ sudo kill 3680

答案 3 :(得分:0)

如果您想一次杀死所有拓扑:

bin/storm kill `bin/storm list | grep <some common keyword>  | awk '{print $1}'` -w 5