手动搭建zookeeper+kafka集群
一、环境准备
至少准备三台服务器,或者5台、7台等等,必须单数。如果只有两台的话,需要再一个服务器上搭建两个,创建两个不用的目录 每台的配置大致一样,配置好一台,其他的基本一样。 这里以三台不同IP的服务器为例,IP分别为172.16.16.30,172.16.16.31,172.16.16.32 下面以第一台为例:
1.1 创建目录结构
在/opt目录下 cd /opt mkdir zookeeper #创建项目目录 mkdir zkdata #创建存放快照日志的目录 mkdir zkdatalog #创建存放事物日志的目录
1.2 下载Zookeeper
稳定版本Zookeeper 3.4.14 cd /opt/zookeeper/ wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz #解压软件 tar -zxvf zookeeper-3.4.14.tar.gz
1.3 修改配置文件
#进入conf目录 /opt/zookeeper/zookeeper-3.4.14/conf
#zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则 接下来修改服务器的配置文件zoo.cfg
接下来修改服务器的配置文件zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/opt/zookeeper/zkdata dataLogDir=/opt/zookeeper/zkdatalog clientPort=12181 server.1=192.168.1.30:2888:3888 server.2=192.168.1.31:2888:3888 server.3=192.168.1.32:2888:3888
server参数说明: #server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里 #192.168.1.30为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888 Zookeeper的三个默认端口说明: 2181:对client端提供服务 3888:选举leader使用 2888:集群内机器通讯使用(Leader监听此端口)
zoo.cfg配置文件参数说明: #tickTime: 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 #initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒 #syncLimit: 这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒 #dataDir: 快照日志的存储路径 #dataLogDir: 事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多 #clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点
1.4 创建myid文件
依次在三台服务器上执行以下命令: #server1 在192.168.1.30上执行 echo "1" > /opt/zookeeper/zkdata/myid #server2在192.168.1.31上执行 echo "2" > /opt/zookeeper/zkdata/myid #server3在192.168.1.32上执行 echo "3" > /opt/zookeeper/zkdata/myid
修改日志配置文件 vi /opt/zookeeper-3.4.14/conf/log4j.properties
注:配置日志存放路径,就用之前建的目录
1.5 启动服务
把上面所有的文件拷贝到另外两台服务器上,然后同时启动三台服务器的zookeeper
#进入到Zookeeper的bin目录下 cd /opt/zookeeper/zookeeper-3.4.14/bin #启动服务(3台都需要操作) ./zkServer.sh start
这样就启动成功了 #还可以检查服务器状态 ./zkServer.sh status
这里三台服务器,有一个主两个从,就是一个leader,两个follower
二.Kafka安装
2.1 解压安装包
还是在 /opt目录下 创建目录 mkdir kafka 在kafka目录下再创建目录,存放消息 mkdir kafkalog 本次使用的是这个版本: http://kafka.apache.org/downloads.html
上传kafka_2.12-2.1.0.tgz安装包 解压tar -zxvf kafka_2.12-2.1.0.tgz
2.2 修改配置文件
cd /opt/kafka/kafka_2.11-0.9.0.1/config/ 修改server.properties 主要修改如下几项:
broker.id=1 每台服务器的broker.id都不能相同 (三台服务器依次是broker.id=1,broker.id=2,broker.id=3) port=9092 log.dirs=/opt/kafka/kafkalog zookeeper.connect=192.168.1.30:2181,192.168.1.31:2181,192.168.1.32:2181 #在log.retention.hours=168 这一行下面新增三项内容: message.max.byte=5242880 default.replication.factor=2 replica.fetch.max.bytes=5242880 将#listeners=PLAINTEXT:// your.host.name:9092 这一行放开注释,写上本机IP 改为 listeners=PLAINTEXT://192.168.1.30:9092 在三台服务器上都部署好kafka,注意上面的broker.id不能相同。
2.3 启动Kafka集群
#从后台启动Kafka集群(3台都需要启动) #进入到kafka的bin目录 cd /opt/kafka/kafka_2.11-0.9.0.1//bin 执行 ./kafka-server-start.sh -daemon ../config/server.properties 检查服务是否启动
2.4 验证和测试
创建Topic来验证是否创建成功,创建一个topic,比如叫 mykafka
在一台服务器上创建一个发布者,比如叫mykafka ./kafka-topics.sh --create --zookeeper 192.168.1.32:2181 --replication-factor 2 --partitions 1 --topic mykafka ./kafka-console-producer.sh --broker-list 192.168.1.30:9092 --topic mykafka
在任意一台服务器上创建一个订阅者 叫mykafka ./kafka-console-consumer.sh --bootstrap-server 192.168.1.31:9092 --topic mykafka --from-beginning 在发布者那里发布消息,看看订阅者那里是否能正常收到~