kafka安装

2023/4/5 Install

# 账号准备

# 1.新建用户

sudo useradd -m -d /home/包名 -s /bin/bash 用户名
1

# 2.设置密码

passwd 用户名
1

# 准备依赖

链接:https://pan.baidu.com/s/1zozaxOWA5dCZKbIG2aqGgg?pwd=5s9g 
提取码:5s9g
1
2

# 执行部署

# 1.解压安装包

tar -zxf kafka_2.13-2.8.0.tgz
1

# 2.进入安装目录

cd kafka_2.13-2.8.0/
1

# 3.修改配置文件

vim config/server.properties

# 本地监听地址
listeners=PLAINTEXT://:9092
# 广播地址
advertised.listeners=PLAINTEXT://{your-server-ip}:9092
# 默认分区数
num.partitions=3
# 这个可以选,默认在/tmp/零时目录下,可能会出现删除的情况
log.dirs=/data/kafka-logs
1
2
3
4
5
6
7
8
9
10

# 4.启动zookeeper

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
1

# 5.启动kafka服务进程

bin/kafka-server-start.sh -daemon config/server.properties
1

# 验证部署

# 1.看kafka进程是否存在

ps -ef|grep kafka|grep -v grep
1

# 2.查看zookeeper服务端口

netstat -ntpl|grep 2181

#出现以下信息
tcp6       0      0 :::2181                 :::*                LISTEN      21327/java
1
2
3
4

# 3.查看kafka服务端口

netstat -ntpl|grep 9092

#出现以下信息
tcp6       0      0 :::9092                 :::*                 LISTEN      21802/java
1
2
3
4

执行命令得到以上结果即说明安装成功。否则仔细检查安装步骤是否均成功,进行重试直至全部成功

# 编写启动脚本

#!/bin/bash
#author : saltedFish

# 设置脚本目录为当前脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" || {
    echo "无法切换到脚本所在目录: $SCRIPT_DIR"
    exit 1
}

# 日志函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}

# 检查进程状态
check_process() {
    local process_pattern=$1
    local should_exist=$2
    
    if pgrep -f "$process_pattern" > /dev/null; then
        if [ "$should_exist" = "true" ]; then
            return 0  # 进程存在且应该存在 → 正常
        else
            return 1  # 进程存在但不应该存在 → 异常
        fi
    else
        if [ "$should_exist" = "true" ]; then
            return 1  # 进程不存在但应该存在 → 异常
        else
            return 0  # 进程不存在且不应该存在 → 正常
        fi
    fi
}

# 等待进程停止
wait_for_stop() {
    local process_pattern=$1
    local process_name=$2
    local max_wait=30
    local waited=0
    
    log "等待 $process_name 停止..."
    
    while [ $waited -lt $max_wait ]; do
        if ! pgrep -f "$process_pattern" > /dev/null; then
            log "$process_name 已停止"
            return 0
        fi
        sleep 2
        waited=$((waited + 2))
        log "已等待 ${waited}..."
    done
    
    log "警告: $process_name 可能没有完全停止"
    return 1
}

# 等待进程启动
wait_for_start() {
    local process_pattern=$1
    local process_name=$2
    local max_wait=60
    local waited=0
    
    log "等待 $process_name 启动..."
    
    while [ $waited -lt $max_wait ]; do
        if pgrep -f "$process_pattern" > /dev/null; then
            log "$process_name 已启动"
            return 0
        fi
        sleep 3
        waited=$((waited + 3))
        log "已等待 ${waited}..."
    done
    
    log "错误: $process_name 启动失败"
    return 1
}

# 检查必要的文件是否存在
check_required_files() {
    local files=("bin/kafka-server-stop.sh" "bin/zookeeper-server-stop.sh" 
                 "bin/zookeeper-server-start.sh" "bin/kafka-server-start.sh"
                 "config/zookeeper.properties" "config/server.properties")
    
    for file in "${files[@]}"; do
        if [ ! -f "$file" ]; then
            log "错误: 必需文件不存在: $file"
            log "当前目录: $(pwd)"
            return 1
        fi
    done
    return 0
}

# 主程序
main() {
    log "开始重启 Kafka 集群..."
    
    # 检查必要文件
    if ! check_required_files; then
        log "请确保在 Kafka 安装目录下运行此脚本"
        exit 1
    fi
    
    # 停止 Kafka
    log "正在停止 Kafka..."
    bin/kafka-server-stop.sh
    
    if ! wait_for_stop "kafka.Kafka" "Kafka"; then
        # 如果正常停止失败,尝试强制杀死进程
        log "尝试强制停止 Kafka..."
        pkill -9 -f "kafka.Kafka"
        sleep 5
    fi
    
    # 再次确认 Kafka 已停止
    if pgrep -f "kafka.Kafka" > /dev/null; then
        log "错误: Kafka 停止失败"
        exit 1
    fi
    
    # 停止 Zookeeper
    log "正在停止 Zookeeper..."
    bin/zookeeper-server-stop.sh
    
    if ! wait_for_stop "org.apache.zookeeper.server" "Zookeeper"; then
        # 如果正常停止失败,尝试强制杀死进程
        log "尝试强制停止 Zookeeper..."
        pkill -9 -f "org.apache.zookeeper.server"
        sleep 5
    fi
    
    # 再次确认 Zookeeper 已停止
    if pgrep -f "org.apache.zookeeper.server" > /dev/null; then
        log "错误: Zookeeper 停止失败"
        exit 1
    fi
    
    # 等待一段时间确保完全停止
    sleep 3
    
    # 启动 Zookeeper
    log "正在启动 Zookeeper..."
    bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
    
    if ! wait_for_start "org.apache.zookeeper.server" "Zookeeper"; then
        log "错误: Zookeeper 启动失败"
        exit 1
    fi
    
    # 等待 Zookeeper 完全就绪
    log "等待 Zookeeper 就绪..."
    sleep 10
    
    # 启动 Kafka
    log "正在启动 Kafka..."
    bin/kafka-server-start.sh -daemon config/server.properties
    
    if ! wait_for_start "kafka.Kafka" "Kafka"; then
        log "错误: Kafka 启动失败"
        exit 1
    fi
    
    # 最终检查
    sleep 5
    local zk_running=$(pgrep -f "org.apache.zookeeper.server" | wc -l)
    local kafka_running=$(pgrep -f "kafka.Kafka" | wc -l)
    
    log "重启完成 - Zookeeper 进程数: $zk_running, Kafka 进程数: $kafka_running"
    
    if [ $zk_running -eq 0 ] || [ $kafka_running -eq 0 ]; then
        log "警告: 可能有个别服务未正常启动"
        exit 1
    fi
    
    log "Kafka 集群重启成功!"
}

# 显示帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -h, --help    显示此帮助信息"
    echo "  -v, --version 显示版本信息"
    echo ""
    echo "此脚本用于重启 Kafka 集群(包括 Zookeeper 和 Kafka)"
    echo "会自动检测当前目录并确保在正确的 Kafka 安装目录下执行"
}

# 显示版本信息
show_version() {
    echo "Kafka 重启脚本 v1.0"
    echo "作者: saltedFish"
}

# 参数处理
case "$1" in
    -h|--help)
        show_help
        exit 0
        ;;
    -v|--version)
        show_version
        exit 0
        ;;
    "")
        # 无参数,执行主程序
        ;;
    *)
        echo "错误: 未知参数 '$1'"
        echo "使用 '$0 --help' 查看帮助信息"
        exit 1
        ;;
esac

# 执行主程序
main "$@"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220