在 CentOS 上部署 ZooKeeper 和 Kafka 集群完整指南
本文详细介绍如何在三台 CentOS 虚拟机上部署 ZooKeeper 集群和 Kafka 集群,并配置 CMAK(Kafka Manager)可视化监控工具。
环境准备
硬件要求
-
3台 CentOS 7/8 虚拟机
-
每台至少 2GB RAM,20GB 磁盘空间
-
网络互通,关闭防火墙或开放相应端口
IP地址规划
| 主机名 | IP地址 | 角色 |
|---|---|---|
| node1 | 192.168.30.134 | ZooKeeper、Kafka |
| node2 | 192.168.30.133 | ZooKeeper、Kafka |
| node3 | 192.168.30.132 | ZooKeeper、Kafka |
第一部分:部署 ZooKeeper 集群
1. 在三台虚拟机上执行以下操作
bash
# 1. 安装 Java 11 yum install -y java-11-openjdk-devel # 2. 下载 ZooKeeper wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.8.5/apache-zookeeper-3.8.5-bin.tar.gz # 3. 解压到 /opt 目录 tar -zxvf apache-zookeeper-3.8.5-bin.tar.gz -C /opt cd /opt ln -s apache-zookeeper-3.8.5-bin/ zookeeper # 4. 配置 ZooKeeper cd /opt/zookeeper/conf/ cp zoo_sample.cfg zoo.cfg vim zoo.cfg
2. 修改 zoo.cfg 配置文件
将以下内容替换到配置文件中:
properties
tickTime=2000 initLimit=10 syncLimit=5 # 数据目录,确保有写入权限 dataDir=/opt/zookeeper/data # 客户端连接端口 clientPort=2181 # 集群节点配置 # 格式:server.id=host:port1:port2 # port1用于节点间通信,port2用于领导者选举 server.1=192.168.30.134:2888:3888 server.2=192.168.30.133:2888:3888 server.3=192.168.30.132:2888:3888
注意:每台机器的 server.id 不同,具体配置如下:
-
node1:server.1
-
node2:server.2
-
node3:server.3
3. 创建数据目录和 myid 文件
bash
# 创建数据目录 mkdir /opt/zookeeper/data # 设置 myid(每台机器不同) # node1 执行: echo "1" > /opt/zookeeper/data/myid # node2 执行: echo "2" > /opt/zookeeper/data/myid # node3 执行: echo "3" > /opt/zookeeper/data/myid
4. 配置 systemd 服务
bash
sudo tee /etc/systemd/system/zookeeper.service << 'EOF' [Unit] Description=Apache ZooKeeper After=network.target [Service] Type=forking User=root Group=root Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk" Environment="ZOOKEEPER_HOME=/opt/zookeeper" Environment="ZOOPIDFILE=/opt/zookeeper/data/zookeeper_server.pid" Environment="ZOO_LOG_DIR=/opt/zookeeper/logs" ExecStart=/opt/zookeeper/bin/zkServer.sh start ExecStop=/opt/zookeeper/bin/zkServer.sh stop ExecReload=/opt/zookeeper/bin/zkServer.sh restart Restart=on-failure RestartSec=10 SuccessExitStatus=143 TimeoutSec=300 WorkingDirectory=/opt/zookeeper PIDFile=/opt/zookeeper/data/zookeeper_server.pid [Install] WantedBy=multi-user.target EOF
5. 启动 ZooKeeper 服务
bash
# 重新加载 systemd 配置 systemctl daemon-reload # 启用开机自启 systemctl enable zookeeper # 启动服务 systemctl start zookeeper # 检查状态 systemctl status zookeeper # 查看日志 tail -f /opt/zookeeper/logs/zookeeper.out
第二部分:部署 Kafka 集群
1. 安装 Kafka
bash
# 下载 Kafka wget https://mirrors.aliyun.com/apache/kafka/3.7.2/kafka_2.12-3.7.2.tgz # 解压到 /opt 目录 tar -zxvf kafka_2.12-3.7.2.tgz -C /opt/ cd /opt ln -s kafka_2.12-3.7.2 kafka # 创建数据目录 mkdir /opt/kafka/data-logs
2. 配置 Kafka
编辑 /opt/kafka/config/server.properties:
bash
cd /opt/kafka/config vim server.properties
根据每台机器修改以下配置:
properties
# broker.id 必须唯一 # node1 配置: broker.id=1 advertised.listeners=PLAINTEXT://192.168.30.134:9092 # node2 配置: broker.id=2 advertised.listeners=PLAINTEXT://192.168.30.133:9092 # node3 配置: broker.id=3 advertised.listeners=PLAINTEXT://192.168.30.132:9092 # 以下配置三台机器相同 log.dirs=/opt/kafka/data-logs listeners=PLAINTEXT://:9092 zookeeper.connect=192.168.30.134:2181,192.168.30.133:2181,192.168.30.132:2181
3. 配置 systemd 服务
bash
sudo tee /etc/systemd/system/kafka.service << 'EOF' [Unit] Description=Apache Kafka After=network.target zookeeper.service [Service] Type=simple User=root ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties ExecStop=/opt/kafka/bin/kafka-server-stop.sh Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target EOF
4. 启动 Kafka 服务
bash
# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable kafka # 启动服务(确保 ZooKeeper 已启动) sudo systemctl start kafka # 检查状态 sudo systemctl status kafka # 查看日志 journalctl -u kafka -f
第三部分:部署 CMAK(Kafka Manager)
1. 安装构建工具
选择一台机器(如 node1)安装 CMAK:
bash
# 安装 sbt(需要 EPEL 仓库) yum install -y epel-release yum install -y sbt # 安装 Git yum install -y git
2. 构建 CMAK
bash
# 克隆 CMAK 仓库 git clone https://github.com/yahoo/CMAK.git cd CMAK # 使用 sbt 构建(首次构建需要下载依赖,时间较长) sbt clean dist # 构建成功后,解压生成的文件 unzip target/universal/cmak-3.0.0.7.zip -d /opt/ cd /opt/cmak-3.0.0.7
3. 配置 CMAK
bash
# 编辑配置文件 vim conf/application.conf
修改以下配置:
properties
kafka-manager.zkhosts="192.168.30.134:2181,192.168.30.133:2181,192.168.30.132:2181"
kafka-manager.zkhosts=${?ZK_HOSTS}
cmak.zkhosts="192.168.30.134:2181,192.168.30.133:2181,192.168.30.132:2181"
cmak.zkhosts=${?ZK_HOSTS}
4. 配置 systemd 服务
bash
sudo tee /etc/systemd/system/cmak.service << 'EOF' [Unit] Description=CMAK (Kafka Manager) After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/cmak-3.0.0.7 ExecStart=/opt/cmak-3.0.0.7/bin/cmak -Dconfig.file=/opt/cmak-3.0.0.7/conf/application.conf -Dhttp.port=9000 Environment="JAVA_OPTS=-Xmx1G -Djava.net.preferIPv4Stack=true" Restart=on-failure RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=cmak [Install] WantedBy=multi-user.target EOF
5. 启动 CMAK 服务
bash
# 重新加载 systemd 配置 systemctl daemon-reload # 启用开机自启 systemctl enable cmak # 启动服务 systemctl start cmak # 检查状态 systemctl status cmak
第四部分:使用 CMAK 管理 Kafka 集群
1. 访问 CMAK Web 界面
打开浏览器,访问:http://你的服务器IP:9000
2. 添加 Kafka 集群
-
点击 "Add Cluster"
-
填写集群信息:
-
Cluster Name: MyKafkaCluster
-
Cluster Zookeeper Hosts: 192.168.30.134:2181,192.168.30.133:2181,192.168.30.132:2181
-
Kafka Version: 选择 3.7.2
-
-
勾选功能选项:
-
✓ Enable JMX Polling
-
✓ Poll consumer information
-
✓ Filter inactive consumers
-
-
点击 "Save"
3. 验证集群状态
在 CMAK 界面中,你应该能看到:
-
所有 Broker 状态为绿色
-
集群健康状态正常
-
可以查看主题、消费者组等信息
常用管理命令
ZooKeeper 服务管理
bash
# 启动 sudo systemctl start zookeeper # 停止 sudo systemctl stop zookeeper # 重启 sudo systemctl restart zookeeper # 查看状态 sudo systemctl status zookeeper # 查看日志 journalctl -u zookeeper -f
Kafka 服务管理
bash
# 启动 sudo systemctl start kafka # 停止 sudo systemctl stop kafka # 重启 sudo systemctl restart kafka # 查看状态 sudo systemctl status kafka # 查看日志 journalctl -u kafka -f
CMAK 服务管理
bash
# 启动 sudo systemctl start cmak # 停止 sudo systemctl stop cmak # 重启 sudo systemctl restart cmak # 查看状态 sudo systemctl status cmak
故障排除
常见问题
-
ZooKeeper 无法启动
-
检查
myid文件是否正确 -
检查防火墙是否开放 2181、2888、3888 端口
-
检查 ZooKeeper 日志:
tail -f /opt/zookeeper/logs/zookeeper.out
-
-
Kafka 无法连接 ZooKeeper
-
确保 ZooKeeper 集群已启动
-
检查
zookeeper.connect配置是否正确 -
检查 Kafka 日志:
journalctl -u kafka -f
-
-
CMAK 无法访问
-
检查防火墙是否开放 9000 端口
-
检查 Java 是否安装正确
-
查看 CMAK 日志:
journalctl -u cmak -f
-
端口说明
| 服务 | 端口 | 用途 |
|---|---|---|
| ZooKeeper | 2181 | 客户端连接端口 |
| ZooKeeper | 2888 | 节点间通信端口 |
| ZooKeeper | 3888 | 领导者选举端口 |
| Kafka | 9092 | Broker 服务端口 |
| CMAK | 9000 | Web 管理界面端口 |
总结
通过以上步骤,你已经成功部署了一个高可用的 ZooKeeper 和 Kafka 集群,并配置了 CMAK 可视化监控工具。这个集群可以用于生产环境,提供可靠的消息队列服务。记得根据实际需求调整配置参数,如内存大小、磁盘空间等。
更多推荐

所有评论(0)