17

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

我运行“storm kill topology-name”来杀死拓扑,但在那之后,有没有一种干净的方法来关闭worker、nimbus、supervisor和ui?

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

4

4 回答 4

17

杀死拓扑的命令(正如您正确提到的):

storm kill topology-name

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

sudo service supervisord stop

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

这个文档

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

如果要杀死所有进程,请在从节点上执行以下过程:

$ sudo supervisorctl stop storm-supervisor
$ sudo pkill -TERM -u storm -f 'backtype.storm.daemon.worker'
于 2013-11-12T10:38:19.433 回答
3

从您链接到的页面:

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

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

如您所见,这旨在为您提供“干净”的关机。kill 命令关闭工人。

于 2013-11-12T10:37:39.743 回答
2

好吧,如果您以 ./storm nimbus & ./storm supervisor & ./storm ui 的身份启动了storm

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

$JAVA_HOME/bin/jps

3201 控制台消费者

7528 日元

2966 卡夫卡

3680 灵气

3681主管

6749 发射器

第2669章

先杀灵气

$ sudo 杀死 3681

$ sudo 杀死 3680

于 2016-07-12T08:00:58.840 回答
0

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

bin/storm kill `bin/storm list | grep <some common keyword>  | awk '{print $1}'` -w 5
于 2020-06-26T13:59:21.307 回答