zookeeper集群部署和kafka集群部署

原创 2019-03-08 14:46:29 JAVA 阅读(433)

简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。kafka依赖于zookeeper,搭建kafka集群前先部署zookeeper集群。

Zookeeper集群搭建

kafka集群是把状态保存到zookeeper中的,所以搭建kafka集群首先要搭建zookeeper集群。

1、环境

这里举例三台服务器测试:

192.168.13.51 server1 192.168.13.52 server2 192.168.13.53 server3

服务器数量最好是单数个数的,(2n + 1)台,zookeeper集群工作条件是要超过半数才能对外提供服务,3台中超过半数是2台,所以一台挂掉,还是能正常工作;
注意:如果是四台服务器,挂掉两台就不能工作了,必须是超过半数才行!
我使用的是java1.8,zookeeper-3.4.10版本

2、下载&&安装zookeeper

java环境的安装这里就不详细列出了;
三台服务器同样的操作:
zookeeper目录结构

#我是统一放在/opt/kafka/下面的 #然后创建zookeeper需要的目录 mkdir zookeeper #项目目录 mkdir zkdata #存放快照日志 mkdir zkdatalog #存放事务日志

zookeeper下载好解压到/opt/kafka/zookeeper下面

cd /opt/kafka/zookeeper/ #进入到目录 #下载软件 wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz #解压 tar -zxvf zookeeper-3.4.10.tar.gz

3、配置zookeeper

进入解压好的目录里面的conf目录中,复制一份配置文件名称取为zoo.cfg

cd /opt/kafka/zookeeper-3.4.10/conf cp zoo_sample.cfg zoo.cfg

zoo_sample.cfg这个文件是官方的样板文件,复制一份zoo.cfg,zoo.cfg是官方指定的配置文件命名规则。
修改配置文件

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/opt/kafka/zkdata dataLogDir=/opt/kafka/zkdatalog clientPort=12181 server.1=192.168.13.51:12888:13888 server.2=192.168.13.51:12888:13888 server.3=192.168.13.51:12888:13888 #server.1(server.myid)这个1是服务器的标识也可以是其他的数字,表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里 #192.168.13.51为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888

创建myid文件(很重要)

#server1 echo "1" > /opt/kafka/zkdata/myid #server2 echo "2" > /opt/kafka/zkdata/myid #server3 echo "3" > /opt/kafka/zkdata/myid

#myid里面的数字,要和server.myid配置的服务器和数字一一对应

4、重要配置说明:

  1. myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。
  2. zoo.cfg 文件是zookeeper配置文件 在conf目录里。
  3. log4j.properties文件是zk的日志输出文件 在conf目录里用java写的程序基本上有个共同点日志都用log4j,来进行管理。
  4. zkEnv.sh和zkServer.sh文件:
    zkServer.sh 主的管理程序文件
    zkEnv.sh 是主要配置,zookeeper集群启动时配置环境变量的文件

5、启动服务并查看

启动和查看状态

#启动服务 /opt/kafka/zookeeper-3.4.10/bin/zkServer.sh start #检查服务状态 /opt/kafka/zookeeper-3.4.10/bin/zkServer.sh status

zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。
使用jps命令可以查看当前java进程和pid

[root@wangfj bin]# jps 1138 Application 16699 QuorumPeerMain 6319 Jps # 这个QuorumPeerMain就是zk得工程main

Kafka集群搭建

1、环境准备

  • 多台linux服务器
  • 已经搭建好的zookeeper集群
  • 版本我使用的是kafka_2.12-1.0.0.tgz

2、创建目录并下载安装软件

#创建目录 cd /opt/kafka/ mkdir kafka_2.12 #创建项目目录cd kafka mkdir kafkalogs #创建kafka消息目录,主要存放kafka消息 #下载软件 wget https://archive.apache.org/dist/kafka/1.0.0/kafka_2.12-1.0.0.tgz #解压软件 tar -zxvf kafka_2.12-1.0.0.tgz

3、修改配置文件

进入目录config中,发现有很多配置文件,我们主要关注修改server.properties文件即可
修改配置:三台服务器的配置只需要修改broker.id不相同,其余配置相同即可

#broker.id=1 每台服务器的broker.id都不能相同 broker.id=1 #设置kafka的ip及端口 advertised.listeners=PLAINTEXT://192.168.13.51:19092 #在log.retention.hours=168 下面新增下面三项 message.max.byte=5242880 default.replication.factor=2 replica.fetch.max.bytes=5242880 #设置zookeeper的集群连接端口 zookeeper.connect=192.168.13.51:12181,192.168.13.52:12182,192.168.13.51:12183

4、启动kafka集群并测试

后台启动kafka服务,三台服务器逐渐启动即可

./bin/kafka-server-start.sh -daemon config/server.properties

验证是否启动,可以使用jps来检查,也可以使用命令netstat来检查你配置的kafka端口是否启动

netstat -tunlp|egrep 19091 #查询19091端口是否启动

5、创建topic验证是否搭建成功

#创建Topic ./kafka-topics.sh --create --zookeeper 192.168.13.51:12181 --replication-factor 2 --partitions 1 --topic test #参数说明 --replication-factor 2 #复制因子,复制两份 --partitions 1 #创建1个分区 --topic #主题名称为test #在一台服务器上创建一个发布者 #创建一个broker,发布者 ./kafka-console-producer.sh --broker-list 192.168.13.51:19091 --topic test # 在一台服务器上创建一个订阅者 ./kafka-console-consumer.sh --zookeeper 192.168.13.51:12181 --topic test --from-beginning