今天,我们在 VMware 中,跑起来 4 台 Zookeeper + 3 台 Kafka 机器。

Conventions

Downloaded packages: /opt/tools

Installed apps: /opt/apps

默认安装的软件:

1
2
3
4
5
6
7
8
9
10
11
yum install tmux wget tree git

rpm -ivh jdk-8u351-linux-x64.rpm
java -version
sudo curl -fsSL https://rpm.nodesource.com/setup_14.x | sudo bash -
yum install -y nodejs
npm --version

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

静态 IP 地址

首先,IP 地址如下(在访问机器上,可以考虑直接更改 C:\Windows\System32\drivers\etc\hosts):

1
2
3
4
5
6
7
192.168.1.201 zookeeper-01
192.168.1.202 zookeeper-02
192.168.1.203 zookeeper-03
192.168.1.204 zookeeper-04
192.168.1.205 kafka-01
192.168.1.206 kafka-02
192.168.1.207 kafka-03

记住,每次 VMware clone 一台新的机器,要做如下两个更改:

1
2
vi /etc/hostname
vi /etc/sysconfig/network-scripts/ifcfg-ens33

其中,网络需要用 Bridge 桥链模式(这样相当于虚拟机跟实体机一样,拥有自己的独立 IP 地址,跟 host 机没关系);不要用 NAT 模式。

另外,ifcfg 配置如下(注意:BOOTPROTO 原值是 dhcp,改掉它):

1
2
3
4
5
BOOTPROTO="static"
IPADDR=192.168.1.200
NETMASK=255.255.255.0
DNS1=192.168.1.1
GATEWAY=192.168.1.1

重启,你就拥有了新的 hostname 和 ipv4 地址。

Zookeeper

1
2
3
4
5
6
7
8
9
wget  https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
mkdir /opt/apps
mv apache-zookeeper-3.7.1-bin /opt/apps/
cd /opt/apps/
ln -s ./apache-zookeeper-3.7.1-bin/ ./zookeeper
cd /opt/apps/zookeeper/
cp conf/zoo_sample.cfg conf/zoo.cfg
vi conf/zoo.cfg

对于 leader/follower 机器,添加以下配置:

1
2
3
4
5
6
dataDir=/usr/data/zookeeper

server.1=192.168.1.201:2888:3888
server.2=192.168.1.202:2888:3888
server.3=192.168.1.203:2888:3888
server.4=192.168.1.204:2888:3888:observer

对于 observer,添加:

1
2
3
4
5
6
7
dataDir=/usr/data/zookeeper

peerType=observer
server.1=192.168.1.201:2888:3888
server.2=192.168.1.202:2888:3888
server.3=192.168.1.203:2888:3888
server.4=192.168.1.204:2888:3888:observer

【maybe optional】对于每一台机器:

1
2
3
4
5
mkdir /usr/data/zookeeper
echo 0 > /usr/data/zookeeper/myid
echo 1 > /usr/data/zookeeper/myid # for zookeeper-02
echo 2 > /usr/data/zookeeper/myid # for zookeeper-03
echo 3 > /usr/data/zookeeper/myid # for zookeeper-04

好了。可以开始启动了。为了方便起见:

1
2
vi /root/.bash_profile
PATH=$PATH:$HOME/bin:/opt/apps/zookeeper/bin

这样,我们就可以随时随地的跑 zkServer.sh 了。

启动:

1
2
3
4
5
zkServer.sh status
zkServer.sh start
zkServer.sh status
zkServer.sh stop
zkServer.sh status

注意看每台机器的角色。

zookeeper-02:

zookeeper-03:

zookeeper-04:

Kafka

1
2
3
4
5
6
7
cd /opt/tools/
tar -zxvf kafka_2.12-3.3.1.tgz
mv kafka_2.12-3.3.1 ../apps/
cd ../apps/
ln -s kafka_2.12-3.3.1/ ./kafka
cd /opt/apps/kafka
vi config/server.properties

改以下几个地方:

1
2
3
4
5
6
broker.id=0 # 分别是 0、1、2、3
listeners=PLAINTEXT://192.168.1.205:9092 # 自己的IP地址
# advertised.listeners 可以不配置,默认 = listeners

zookeeper.connect=192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181,192.168.1.204:2181
# zookeeper 配置很重要。这里我用了4台机器的cluster。

注意看 log.dirs=/tmp/kafka-logs 这个参数。因为这里的 broker_id 也要改,否则会报错 “Configured broker.id 1 doesn’t match stored broker.id Some(0) in meta.properties.”

1
2
vi /tmp/kafka-logs/meta.properties
broker.id=0

好了,可以开始跑了:

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

如果想在后台跑:

1
2
3
4
5
6
bin/kafka-server-start.sh -daemon config/server.properties
ps aux | grep kafka
bin/kafka-server-stop.sh
ps aux | grep kafka
bin/kafka-topics.sh --create --bootstrap-server kafka-01:9092 --topic cities
bin/kafka-topics.sh --list --bootstrap-server kafka-01:9092