Docker 部署kafka + zookeeper集群
一、部署zookeeper集群(三台服务器同样的操作)
1、下载zookeeper镜像(本文使用3.7)
docker pull zookeeper:3.7
2、创建挂载配置文件夹和数据文件夹
#创建挂载文件夹 sudo mkdir /data/zk/{conf,data} -p #赋值权限 sudo chmod 777 conf
3、创建配置文件和myid
#进入conf文件夹
cd conf #创建配置文件 vim zoo.cfg #文件内容 dataDir=/data dataLogDir=/datalog tickTime=2000 initLimit=5 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 standaloneEnabled=true admin.enableServer=true
quorumListenOnAllIPs=true
#绑定服务ID server.1=192.168.79.50:2888:3888;2181 server.2=192.168.79.51:2888:3888;2181 server.3=192.168.79.52:2888:3888;2181 #进入data文件夹 cd data #创建myid文件 vim myid #内容(设置集群下,服务ID,同一个集群不能重复) 1
注:如果出现如下错误:
![](https://img2020.cnblogs.com/blog/2226025/202106/2226025-20210608162257102-975779505.png)
修改配置文件,加上该项:
quorumListenOnAllIPs=true
主要是会影响ZAB协议和FastLeaderElection协议。
官网原文如下:
quorumListenOnAllIPs
When set to true the ZooKeeper server will listen for connections from its peers on all available IP addresses, and not only the address configured in the server list of the configuration file. It affects the connections handling the ZAB protocol and the Fast Leader Election protocol. Default value is false
4、启动容器
#运行容器 docker run -d -p 8080:8080 -p 2181:2181 -p 2888:2888 -p 3888:3888 -v /data/zk/conf/zoo.cfg:/conf/zoo.cfg -v /data/zk/data:/data --restart always --name=myzk zookeeper:3.7 #8080可不暴露,暴露后可通过URL查看zk状态信息等 http://192.168.79.52:8080/commands/stats #进入容器 docker exec -it myzk /bin/bash #查看状态 zkServer.sh status
二、部署fafka集群
1、下载镜像(本文使用 2.12-2.5.0)
docker pull wurstmeister/kafka:2.12-2.5.0
2、运行容器
#如果是docker安装kafka,-e的参数必须添加,不能从配置文件挂载 docker run -d -p 9092:9092 -e KAFKA_BROKER_ID=3 -e KAFKA_ZOOKEEPER_CONNECT=192.168.79.50:2181,192.168.79.51:2181,192.168.79.52:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.79.52:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 --restart always --name=mykafka wurstmeister/kafka:2.12-2.5.0
到这一步kafka集群就安装成功了,后续写了下配置信息说明,如果对配置有修改的,可进行挂载执行
3、创建挂载文件夹(还可以挂着log和data,这里不详细说明,步骤一样的)
#创建挂载文件夹 sudo mkdir /data/kafka/conf -p #赋值权限 sudo chmod 777 conf
4、创建配置文件并编写
vim server.properties #文件内容 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样 broker.id=1 #当前kafka对外提供服务的端口默认是9092 port=9092 #服务器监听地址 listeners=PLAINTEXT://0.0.0.0:9092 #对外暴露的服务端口 advertised.listeners=PLAINTEXT://192.168.79.52:9092 #处理网络请求的最大线程数 num.network.threads=3 #处理磁盘I/O的线程数 num.io.threads=8 # socket的发送缓冲区(SO_SNDBUF) socket.send.buffer.bytes=102400 # socket的接收缓冲区 (SO_RCVBUF) socket.receive.buffer.bytes=102400 # socket请求的最大字节数。为了防止内存溢出,message.max.bytes必然要小于java的堆栈大小 socket.request.max.bytes=104857600 #默认的分区数,一个topic默认1个分区数 num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 #日志存放目录,多个目录使用逗号分割 log.dirs=/kafka/kafka-logs-3dff9a1f9fbc #日志保存时间 (hours|minutes),默认为7天(168小时)。超过这个时间会根据policy处理数据。bytes和minutes无论哪个先达到都会触发。 log.retention.hours=168 #控制日志segment文件的大小,超出该大小则追加到一个新的日志segment文件中(-1表示没有限制) log.segment.bytes=1073741824 #日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours或log.retention.bytes) log.retention.check.interval.ms=300000 #Zookeeper quorum设置。如果有多个使用逗号分割 zookeeper.connect=192.168.79.50:2181,192.168.79.51:2181,192.168.79.52:2181 #连接zk的超时时间 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0
5、安装kafka管理界面
#下载镜像(3.0.0.4) docker pull kafkamanager/kafka-manager:3.0.0.4 #启动容器 docker run -d -p 9000:9000 -e ZK_HOSTS="192.168.79.50:2181,192.168.79.51:2181,192.168.79.52:2181" --restart always --name=kafka-manager kafkamanager/kafka-manager:3.0.0.4
6、访问kafka管理端 http://192.168.79.52:9000/
添加zk集群:
查看集群的Brokers,可以看到kafka的集群信息:
管理端的具体使用就不介绍了,有兴趣的自己度娘查吧
学无止境...