【问题标题】:Stopping Storm: the right way停止风暴:正确的方法
【发布时间】:2013-11-24 10:43:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: java apache-storm


    【解决方案1】:

    从您链接到的页面:

    杀死

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

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

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

    【讨论】:

    • +1,不需要手动杀死 Storm 工作进程,因为storm kill topology-name 会为你杀死它们。之后,在集群上不再运行拓扑的情况下,您终止了 Supervisor 和 Nimbus 进程(以及可选的 Storm UI 和 DRPC 进程)。
    • 很高兴知道。不过,我觉得您需要对风暴进程进行一些抽象,因为我不想手动杀死每个进程并重新启动它们。有时我希望一切都被关闭。 Supervisord 看起来更优雅,我要求不要“杀死”每个进程,包括 ui、nimbus 和 supervisor(supervisord 会这样做,而不是我)。
    • 我明白了。是的......如果你有多个拓扑,那么“风暴杀死”是不够的。
    【解决方案2】:

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

    storm kill topology-name
    

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

    sudo service supervisord stop
    

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

    来自this 文档

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

    如果您想杀死所有进程,请在从节点上执行此过程:

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

    【讨论】:

    • 我会试试的,感谢您指出主管的链接。
    • 它工作得很好,但我仍然必须将完整的命令(使用 java -server -Dstorm.options...)让 supervisord 在 supervisord.conf 中使用storm,这似乎是一个 python 错误在storm和supervisord之间。很好地停止一切,并通过自动重启和日志进行监督。
    • @zenbeni - 如果您认为这是一个错误,请通过错误/问题跟踪器报告。告诉>>我们
    【解决方案3】:

    如果你以 ./storm nimbus & ./storm supervisor & ./storm ui 的身份启动了storm

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

    $JAVA_HOME/bin/jps

    3201 控制台消费者

    7528 日/秒

    2966 卡夫卡

    3680 灵气

    3681 主管

    6749 启动器

    2669 QuorumPeerMain

    先杀死灵气

    $ sudo kill 3681

    $ sudo kill 3680

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 2023-03-28
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多