Docker搭建Kafka集群
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
对于个人开发者而言一般手头上没有多台服务器有人可能会有云服务器不过一般也只会买一台来用用就好有人可能更习惯将本机当作服务器来玩。都可以。那么如何通过一台服务器或本机来搭建Kafka集群呢
无外乎两种方式一是通过docker来搭建每台kafka broker用不同的端口来启动即可组成集群二是通过虚拟机来搭建即用VMware在服务器或本机上启动多台虚拟机每台虚拟机都安装一个kafka broker。笔者采用的是第一种方式。
1、环境说明及架构说明
Linux系统centos 8
Zookeeperwurstmeister/zookeeper
Kafkawurstmeister/kafka
如下图笔者准备搭建一台Zookeeper以及三个Kafka broker组成的Kafka Cluster。
2、docker搭建Zookeeper
1查看镜像
首先用docker search命令来查找docker上有哪些可用的Zookeeper镜像。
docker search zookeeper
照理说镜像最好选择官方镜像也就是上图中的第一个。但是笔者这里选择第二个镜像wurstmeister/zookeeper那是因为我发现用docker查找Kafka的镜像时是没有官方镜像的而Kafka镜像中排在第一的也是以wurstmeister为开头的。也就是说这两个镜像是出自同一家机构或个人的。
2拉取镜像
然后拉取镜像默认拉取最新版本的。
docker pull wurstmeister/zookeeper
3启动镜像
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
3、docker搭建Kafka Cluster
启动好了Zookeeper服务之后来开始搭建Kafka Cluster了。
1查找镜像
同样用docker search命令来查找Kafka的镜像这里有个小插曲笔者发现个问题。
直接用docker search查找结果集中并未有wurstmeister/kafka而用
docker search kafka --limit=50
这条命令查找结果集的第一条就是wurstmeister/kafka且收藏数最多。也就是说docker search这条命令返回的结果集在默认情况下是有条数限制的。但奇怪的是就算有条数限制为什么不按照收藏量STARS优先返回镜像的结果集呢这个疑惑暂且放下知道的同学麻烦在评论区告知一下哈。
2拉取镜像
docker pull wurstmeister/kafka
3启动三个broker
命名为kafka0 端口9092 brokerId: 0
docker run -d --name kafka0 -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=xxx:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://xxx:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
命名为kafka1 端口9093 brokerId: 1
docker run -d --name kafka1 -p 9093:9093 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=xxx:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://xxx:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -t wurstmeister/kafka
命名为kafka2 端口9094 brokerId: 2
docker run -d --name kafka2 -p 9094:9094 -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=xxx:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://xxx:9094 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9094 -t wurstmeister/kafka
【Attention以上三条命令中的xxx用自己的服务器ip替换】
执行上面三条命令后分别在9092 / 9093 / 9094三个端口启动了kafka broker执行docker ps查看结果。
至此三个broker节点的Kafka集群搭建完成。
4小插曲kafka启动失败
笔者一开始在启动kafka的时候一直启动失败。报错如下
kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
大概翻译过来就是kafka服务在启动的时候连接Zookeeper服务超时说白了就是连不上。
btw如果容器没起来的话无法通过docker exec进入容器查看容器日志此时可以用
docker logs 容器id 查看docker容器的日志注意是容器id并不是镜像id。
笔者在这个问题上搞了将近一个小时才想起来是云服务器的网络安全组的规则忘记配置了。
于是立马登上云服务器配置了一下然后kafka就能启动成功了。
4、效果测试
执行docker exec命令随意进入一个broker的容器内再进入opt目录。
进入opt目录后发现有两个kafka对比了一下两个kafka目录差不多都有bin下的各种可执行脚本都有config下的各种properties配置文件。这里笔者选择了kafka_2.13-2.8.1目录。
笔者创建了一个名为 topic-demo 的主题该主题有3个分区3个副本因子。
从 describe 命令可以看到3个分区均匀地分布在三个broker中。可见这三个broker已经成功地组成了Kafka集群了。
执行操作主题等相关命令可参考Kafka学习——梳理bin目录下各个脚本的用法五