准备两台虚拟机
192.168.155.44 安装zookeeper、kafka
192.168.155.46 安装kafka
1:在192.168.155.44 虚拟机上,kafka需要zookeeper管理,所以需要先安装zookeeper。 下载docker pull wurstmeister/zookeeper:latest版本
docker pull wurstmeister/zookeeper
2:启动镜像生成容器
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
3:下载kafka镜像
docker pull wurstmeister/kafka
4:启动kafka镜像生成容器
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.155.44:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.155.44:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
-e KAFKA_ZOOKEEPER_CONNECT=192.168.155.44:2181/kafka 配置zookeeper管理kafka的路径192.168.155.44:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.155.44:9092 把kafka的地址端口注册给zookeeper
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
5:创建一个topic测试下看kafka是否正常运行
进入容器:
docker exec -it kafka /bin/sh
cd opt/bin
运行语句:
kafka-topics.sh --create --topic test --zookeeper 192.168.155.44:2181/kafka --replication-factor 2 --partitions 2
报错,因为我只建立了一个kafka容器,建立不出来两个replication-factor 2
运行语句:
kafka-topics.sh --create --topic test --zookeeper 192.168.155.44:2181/kafka --replication-factor 1 --partitions 2
查看topic的详细信息:
kafka-topics.sh --describe --zookeeper 192.168.155.44:2181/kafka --topic test
可以看到建立的两个分区都在BROKER_ID=0这个节点上
6:在192.168.155.46虚拟机上再安装一个kafka容器。
运行容器:
docker run -d --name kafka -p 9093:9093 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=192.168.155.44:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.155.44:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -v /etc/localtime:/etc/localtime wurstmeister/kafka
其中需要注意:
1)端口我修改成了9093:9093
2)KAFKA_BROKER_ID从0修改成了1 KAFKA_BROKER_ID=1
3)后面的链接端口都是9093
启动成功后,kafka集群就已经搭建完成了
7:测试集群功能
进入kafka容器,进入44或46的kafka容器都可以,我进入的是44的kafka容器
运行语句
kafka-topics.sh --create --topic test1 --zookeeper 192.168.155.44:2181/kafka --replication-factor 2 --partitions 2
这时用--replication-factor 2已经不报错了。
查询topic=test1的详细信息:
kafka-topics.sh --describe --zookeeper 192.168.155.44:2181/kafka --topic test1
可以看到1个分区在BROKER_ID=0上,一个分区在BROKER_ID=1上。说明kafka集群已经搭建成功。
我们把46的kafka容器关闭掉
docker stop kafka
再在44的kafka容器中查看topic=test1的详细信息:
kafka-topics.sh --describe --zookeeper 192.168.155.44:2181/kafka --topic test1
我们可以发现,两个分区对应的节点都指向了BROKER_ID=0,实现了高可用。
8:介绍下docker-compose的安装,kafka集群也可以用docker-compose启动
docker-compose可以管理docker的容器启动,感兴趣的小伙伴可以自行上网学习下
1:先安装docker-compose
pip -V
yum -y install epel-release
yum -y install python-pip
pip install --upgrade pip
pip -V
pip install docker-compose
docker-compose -version
安装docker-compose完成,版本是1.23.2
-----------------------以后补充docker-compose启动kafka集群文档