java - Deteniendo la tormenta: el camino correcto
apache-storm (3)
Bueno, si has empezado Storm como ./storm nimbus & ./storm supervisor & ./storm ui entonces
después de eso, puede que olvide los ID de proceso, en ese caso, puede usar la herramienta jps para descubrir los de pid y luego matarlos como
$ JAVA_HOME / bin / jps
3201 ConsoleConsumer
7528 jps
2966 Kafka
3680 nimbo
Supervisor 3681
6749 Launcher
2669 QuorumPeerMain
matando a nimbo primero
$ sudo kill 3681
$ sudo kill 3680
¿Hay una forma limpia de detener la tormenta sin matarla con "kill XXX" donde XXX es el PID?
Ejecuto "storm kill topology-name" para matar a la topología, pero después de eso, ¿hay una forma limpia de cerrar trabajadores, nimbus, supervisor y ui?
No encontré ningún comando que corresponda a esto en la documentación: https://github.com/nathanmarz/storm/wiki/Command-line-client
Desde la página a la que has vinculado:
matar
Sintaxis: storm kill topology-name [-w wait-time-secs]
Mata la topología con el nombre topología-nombre. Storm desactivará primero los picos de la topología durante el tiempo de espera del mensaje de la topología para permitir que todos los mensajes que se procesan actualmente finalicen el procesamiento. Storm entonces cerrará a los trabajadores y limpiará su estado. Puede anular el período de tiempo que Storm espera entre la desactivación y el apagado con el indicador -w.
Como puede ver, esto está diseñado para darle un apagado "limpio". El comando de matar apaga a los trabajadores.
comando para matar a la topología (como bien has mencionado)
storm kill topology-name
Ahora, para cerrar el clúster, debe ejecutar el siguiente comando en cada nodo
sudo service supervisord stop
Dale a supervisord
unos segundos para que cierre todos los procesos. Tenga en cuenta que al intentar ejecutar supervisorctl
cuando se detiene Supervord, se generará un mensaje de error (esto parece ser un problema conocido de la interfaz de usuario en Supervord 2.x)
De this documentación
¿Cómo eliminar TODOS los procesos de Storm, incluidos los procesos de trabajo? Todos los subprocesos de trabajo (iniciados por los demonios Supervisor en los nodos esclavos) que se ejecutan cuando se detiene el clúster continuarán ejecutándose. Esta es una decisión deliberada de diseño de Storm porque significa que el bloqueo / reinicio de los demonios Nimbus y Supervisor no afectará ninguna topología en ejecución en Storm. El inconveniente es que tiene que hacer un esfuerzo adicional para detener completamente todos los procesos relacionados con Storm en un clúster.
# 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''