Tips
向进程发送 TERM
信号就可以优雅地关闭 Kafka Broker
这是 bin/kafka-server-stop.sh
的内容,他的思路就是通过 ps 查找 cmd 中包括 kafka.Kafka
的进程,来寻找进程 ID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
SIGNAL=${SIGNAL:-TERM}
OSNAME=$(uname -s)
if [[ "$OSNAME" == "OS/390" ]]; then
if [ -z $JOBNAME ]; then
JOBNAME="KAFKSTRT"
fi
PIDS=$(ps -A -o pid,jobname,comm | grep -i $JOBNAME | grep java | grep -v grep | awk '{print $1}')
elif [[ "$OSNAME" == "OS400" ]]; then
PIDS=$(ps -Af | grep -i 'kafka\.Kafka' | grep java | grep -v grep | awk '{print $2}')
else
PIDS=$(ps ax | grep ' kafka\.Kafka ' | grep java | grep -v grep | awk '{print $1}')
fi
if [ -z "$PIDS" ]; then
echo "No kafka server to stop"
exit 1
else
kill -s $SIGNAL $PIDS
fi
|
但是 Linux 内核有限制,ps 输出的一行内容不能超过页大小 PAGE_SIZE
(4096),所以如果 kafka 进程的 cmd 过长,可能会导致 ps + grep 失败。
此时就需要我们手动来找对应的进程,可以通过 ps ax | grep 'kafka'
来寻找对应的进程。
文章作者
bwangel
上次更新
2022-04-20
许可协议
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处