Java 阻止风暴:正确的方法

Java 阻止风暴:正确的方法,java,apache-storm,Java,Apache Storm,有没有一种干净的方法可以阻止风暴,而不用“杀死XXX”,XXX是PID 我运行“storm kill topology name”来终止拓扑,但在此之后,是否有一种干净的方法来关闭workers、nimbus、supervisor和ui 我在文档中找不到与此对应的任何命令:从您链接到的页面: 杀死 语法:storm kill拓扑名称[-w等待时间秒] 终止名为topology name的拓扑。Storm将首先在拓扑的消息超时期间停用拓扑的喷口,以允许当前正在处理的所有消息完成处理。风暴将关闭工人

有没有一种干净的方法可以阻止风暴,而不用“杀死XXX”,XXX是PID

我运行“storm kill topology name”来终止拓扑,但在此之后,是否有一种干净的方法来关闭workers、nimbus、supervisor和ui


我在文档中找不到与此对应的任何命令:

从您链接到的页面:

杀死

语法:storm kill拓扑名称[-w等待时间秒]

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


正如你所看到的,这是为了给你一个“干净”的关机。kill命令关闭worker。

终止拓扑的命令(如您正确提到的):

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

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

从文件

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

如果要终止所有进程,请在从属节点上执行以下步骤:

$ sudo supervisorctl stop storm-supervisor
$ sudo pkill -TERM -u storm -f 'backtype.storm.daemon.worker'

好吧,如果你已经开始风暴作为./storm nimbus和./storm supervisor和./storm ui,那么

之后,您可能会忘记进程id,在这种情况下,您可以使用jps工具找出pid,然后将其作为

$JAVA_HOME/bin/jps

3201控制台消费者

7528日元

2966卡夫卡

3680光轮

3681主管

6749发射器

2669 QuorumPeerMain

先杀光轮

$sudo kill 3681


$sudo kill 3680

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

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

我会尝试一下,谢谢你指出Supervisor有一个很好的链接。它工作得很好,但我还是必须使用完整的命令(使用java-server-Dstorm.options…)才能让supervisord在supervisord.conf中与storm一起工作,这看起来像是storm和supervisord之间的python错误。很高兴能停止所有操作,并通过自动重启和日志进行监控。@zenbeni-如果您觉得这是一个bug,请通过bug/issue tracker报告。告诉>>us+1,无需手动终止Storm worker进程,因为
Storm kill topology name
将为您终止它们。之后,在集群上不再运行拓扑的情况下,您将杀死Supervisor和Nimbus进程(以及可选的Storm UI和DRPC进程)。不过,我觉得您需要对storm进程进行一些抽象,因为我不想手动终止每个进程并重新启动它们。有时候,我希望一切都关闭。Supervisord看起来更优雅,我要求不要“杀死”每个进程,包括ui、nimbus和supervisor(Supervisord做的,不是我)。我明白了。对如果你有多个拓扑,那么“风暴杀戮”是不够的。
bin/storm kill `bin/storm list | grep <some common keyword>  | awk '{print $1}'` -w 5