1. 借鉴
2. 开始
我们的集群规划如下:
| kafka01[172.173.16.19] | kafka02[172.173.16.20] | kafka03[172.173.16.21] |
|---|
镜像准备
- docker hub 下载
docker pull caiserkaiser/centos-ssh
创建自定义网络
docker network create -d bridge --subnet "172.173.16.0/24" --gateway "172.173.16.1" datastore_net
启动容器
docker run -it -d --network datastore_net --ip 172.173.16.19 --name kafka01 caiser/centos-ssh:7.8
下载kafka
下载kafka
-
拷贝到容器内
docker cp ~/Downloads/kafka_2.11-0.11.0.2.tgz df4410d638e8:/opt/envs -
解压
tar -zxvf kafka_2.11-0.11.0.2.tgz
配置
server.properties
-
a. 备份
cp /opt/envs/kafka_2.11-0.11.0.2/config/server.properties /opt/envs/kafka_2.11-0.11.0.2/config/server.properties.bak -
b. 编辑server.properties
vi /opt/envs/kafka_2.11-0.11.0.2/config/server.properties -
c. 配置
①.
打开下面这一行的注释,使可以删除topic# delete.topic.enable=true②. 配置 log.dirs【指定目录时需要先创建】
log.dirs=/opt/logs③. 配置zookeeper
zookeeper.connect=zookeeper01:2181,zookeeper02:2181,zookeeper03:2181④. 配置listeners
listeners=PLAINTEXT://kafka01:9092
kafka-节点配置
-
编辑/etc/hosts,并添加以下hostname
172.173.16.13 zookeeper01 172.173.16.14 zookeeper02 172.173.16.15 zookeeper03 172.173.16.19 kafka01 172.173.16.20 kafka02 172.173.16.21 kafka03
保存为镜像并移除容器
docker commit df4410d638e8 caiser/kafka:0.11.0.2
docker rm df4410d638e8
启动容器
docker run -it -d --network datastore_net --ip 172.173.16.19 --name kafka01 caiser/kafka:0.11.0.2 bin/bash
docker run -it -d --network datastore_net --ip 172.173.16.20 --name kafka02 caiser/kafka:0.11.0.2 bin/bash
docker run -it -d --network datastore_net --ip 172.173.16.21 --name kafka03 caiser/kafka:0.11.0.2 bin/bash
【重要】配置不同的broker.id
在config/server.properties下,不同的节点的broker.id必须不同,所以我们分配如下
| 节点 | kafka01[172.173.16.19] | kafka02[172.173.16.20] | kafka03[172.173.16.21] |
|---|---|---|---|
| broker.id | 0 | 1 | 2 |
vi /opt/envs/kafka_2.11-0.11.0.2/config/server.properties
【重要】配置不同的listeners
在config/server.properties下,不同的节点的listeners必须为本机hostname
| 节点 | 配置 |
|---|---|
| kafka01[172.173.16.19] | listeners=PLAINTEXT://kafka01:9092 |
| kafka02[172.173.16.20] | listeners=PLAINTEXT://kafka02:9092 |
| kafka03[172.173.16.21] | listeners=PLAINTEXT://kafka03:9092 |
vi /opt/envs/kafka_2.11-0.11.0.2/config/server.properties
配置ssh免密登录
-
进入容器
docker exec -it kafka01 /bin/bash -
到~/.ssh目录下生成秘钥
ssh-keygen -t rsa -
拷贝秘钥到kafka01,kafka03和kafka02
a.[如果没开启]三个容器没有开启ssh服务[ps -ef | grep ssh],需要依次执行
/usr/sbin/sshd -D &b. 拷贝秘钥
ssh-copy-id kafka01 ssh-copy-id kafka02 ssh-copy-id kafka03 kafka02和kafka03依次执行上述1-3步骤
启动kafka
依次到kafka01,kafka02,kafka03机器上执行以下命令
cd /opt/envs/kafka_2.11-0.11.0.2/
bin/kafka-server-start.sh config/server.properties &
配置 集群起/停 脚本
这样就不用到所有机器上依次启停了...
#! /bin/bash
case $1 in
"start") {
for i in kafka01 kafka02 kafka03; do
echo "----- start $i -----"
ssh $i "export JMX_PORT=9988 && /opt/envs/kafka_2.11-0.11.0.2/bin/kafka-server-start.sh -daemon /opt/envs/kafka_2.11-0.11.0.2/config/server.properti
es"
done
};;
"stop") {
for i in kafka01 kafka02 kafka03; do
echo "----- stop $i -----"
ssh $i "/opt/envs/kafka_2.11-0.11.0.2/bin/kafka-server-stop.sh stop"
done
};;
esac