本文详细介绍如何在三台 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 集群

  1. 点击 "Add Cluster"

  2. 填写集群信息:

    • 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

  3. 勾选功能选项:

    • ✓ Enable JMX Polling

    • ✓ Poll consumer information

    • ✓ Filter inactive consumers

  4. 点击 "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

故障排除

常见问题

  1. ZooKeeper 无法启动

    • 检查 myid 文件是否正确

    • 检查防火墙是否开放 2181、2888、3888 端口

    • 检查 ZooKeeper 日志:tail -f /opt/zookeeper/logs/zookeeper.out

  2. Kafka 无法连接 ZooKeeper

    • 确保 ZooKeeper 集群已启动

    • 检查 zookeeper.connect 配置是否正确

    • 检查 Kafka 日志:journalctl -u kafka -f

  3. CMAK 无法访问

    • 检查防火墙是否开放 9000 端口

    • 检查 Java 是否安装正确

    • 查看 CMAK 日志:journalctl -u cmak -f

端口说明

服务 端口 用途
ZooKeeper 2181 客户端连接端口
ZooKeeper 2888 节点间通信端口
ZooKeeper 3888 领导者选举端口
Kafka 9092 Broker 服务端口
CMAK 9000 Web 管理界面端口

总结

通过以上步骤,你已经成功部署了一个高可用的 ZooKeeper 和 Kafka 集群,并配置了 CMAK 可视化监控工具。这个集群可以用于生产环境,提供可靠的消息队列服务。记得根据实际需求调整配置参数,如内存大小、磁盘空间等。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐