ZooKeeper和Kafka集群部署
ZooKeeper集群部署
准备三台机器搭建集群,所有命令都在三台机器上运行
基础环境配置
主机名配置
# hostnamectl set-hostname zookeeper1
# hostnamectl set-hostname zookeeper2
# hostnamectl set-hostname zookeeper3
# bash 重启生效
配置文件
三台机器修改
# vi /etc/hosts
搭建集群
安装环境
三台机器安装JDK环境
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
查看java版本
# java -version
解压软件包
将zookeeper压缩包上传到三台机器的/root目录,进行解压
# tar -zxvf zookeeper-3.4.14.tar.gz
修改配置文件
修改三台机器的配置文件
# cd zookeeper-3.4.14/conf
# mv zoo_sample.cfg zoo.cfg
在文件最后加入三行
# vi zoo.cfg
initLimit:ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间
syncLimit:配置follower和leader之间发送消息,请求和应答的最大时间长度
tickTime:tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒
server.id=host:port1:port2:其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口
dataDir:其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id
创建myid文件
在三台机器上创建myid文件
# mkdir /tmp/zookeeper
# vi /tmp/zookeeper/myid
文件里的数字为zoo.cfg的指定值,第二台机器为2,第三台为3
启动服务
关闭三台机器的防火墙
# systemctl stop firewalld
启动zookeeper服务
# cd zookeeper-3.4.14/bin
# ./zkServer.sh start
查看启动状态
# ./zkServer.sh status
两台机器为follower,一台为leader
Kafka集群部署
kafka服务依赖于zookeeper服务。所以用搭建过zookeeper集群的三台机器进行构建kafka集群。所有命令都在三台机器上运行
搭建集群
解压软件包
将kafka压缩包上传到三台机器的/root目录,进行解压
# tar -zxvf kafka_2.11-1.1.1.tgz
修改配置文件
在三台机器上修改配置文件
# cd kafka_2.11-1.1.1/config
# vi server.properties
将配置文件中以下两行注释掉(在文本前加#)
#broker.id=0
#zookeeper.connect=localhost:2181
在文件底部添加配置
第一台机器
第二台机器
第三台机器
broker.id:每台机器不能一样
zookeeper.connect:有3台ZooKeeper服务器
listeners:在配置集群的时候,必须设置,不然以后的操作会报找不到leader的错误。
启动服务
在三台机器上启动服务
# cd kafka_2.11-1.1.1/bin
# ./kafka-server-start.sh -daemon ../config/server.properties
查看服务
# jps
第一台机器
第二台机器
第三台机器
测试服务
# cd kafka_2.11-1.1.1/bin
在第一台机器创建topic命令
# ./kafka-topics.sh --create --zookeeper 192.168.37.12:2181 --replication-factor 1 --partitions 1 --topic test
成功输出“Created topic "test"
在第二台和第三台机器分别测试查看topic
# ./kafka-topics.sh --list --zookeeper 192.168.37.13:2181
# ./kafka-topics.sh --list --zookeeper 192.168.37.14:2181
成功输出test