docker搭建zk+kafka集群

1 搭建zookeeper集群(本文使用的是docker,创建三个容器)

1.1 下载zookeeper,可以直接在官网下载,也可以通过wget的方式下在

官网1:https://zookeeper.apache.org/

官网2:http://mirrors.hust.edu.cn/apache/zookeeper/
##在官网2的链接中找到想要下载的zk版本,在linux中使用wget命令下载

wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8.tar.gz

1.2 修改zookeeper配置

##切换到zookeeper的配置文件目录下
cd zookeeper/conf

## 备份一份zoo_sample.cfg文件
cp zoo_sample.cfg zoo.cfg

##修改配置
vi zookeeper/config/zoo.cfg


tickTime=2000    ##zookeeper中心跳机制的心跳时间
initLimit=10     ##这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit=5      ##这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
dataDir=/usr/local/zookeeper-3.4.9/zkdata   ##快照存储路径
dataLogDir=/usr/local/zookeeper-3.4.9/zkdatalog ##事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
clientPort=2181 ##这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求


server.1=kafka01:2888:3888
server.2=kafka02:2888:3888
server.3=kafka03:2888:3888

##server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
## kafka:2888:3888是配置集群的ip和端口的映射关系,2888是zk集群间master和slave的通信端口,3888是zk集群中的leader的选举端口

1.3 创建myid文件

##分别在不同的服务器中的zookeeper的快照目录下创建myid文件,并写入相应的服务器标识
echo 1 >> /usr/local/zookeeper-3.4.9/zkdata/myid
echo 2 >> /usr/local/zookeeper-3.4.9/zkdata/myid
echo 3 >> /usr/local/zookeeper-3.4.9/zkdata/myid

1.4 启动集群

##分别在每台服务器上启动
./zkServer.sh start


##使用jps查看启动情况 或者使用./zkServer.sh status 查看状态信息
jps  
1479 Jps
456 QuorumPeerMain

./zkServer.sh status

注:若zk启动失败,在zookeeper/bin目录下的zookeeper.out文件中查看启动错误日志信息

2 kafka集群

准备环境与zookeeper类似,且zk环境启动正常

2.1 kafka配置

kafka的config目录中有很多文件,重点关注server.properties文件

注:kafka内置有zookeeper集群,建议使用独立的zk集群来启动kafka

修改server.properties文件

broker.id=0                  ##当前机器在集群中的唯一标识,和zookeeper的myid性质一样
port=9092                    ##当前kafka对外提供服务的端口默认是9092
num.network.threads=3        ##这个是borker进行网络处理的线程数
num.io.threads=8			 ##这个是borker进行I/O处理的线程数
log.dirs=/usr/local/kafka/kafkalogs/ ##消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
socket.send.buffer.bytes=102400 ##发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.receive.buffer.bytes=102400 ##kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.request.max.bytes=104857600 ##这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
num.partitions=1            ##默认的分区数,一个topic默认1个分区数
log.retention.hours=168 	##默认消息的最大持久化时间,168小时,7天
message.max.byte=5242880    ##消息保存的最大值5M
default.replication.factor=2  ##kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
replica.fetch.max.bytes=5242880  ##取消息的最大直接数
log.segment.bytes=1073741824 ##这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.retention.check.interval.ms=300000 ##每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除
log.cleaner.enable=false      ##是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=192.168.10.60:2181,192.168.10.62:2181,192.168.10.61:218 #设置zookeeper的连接端口

注:log.dir要自己创建

2.2 启动kafka集群

##进入kafka的bin目录下后台启动kafka集群(每台机器都要启动)
./kafka-server-start.sh -daemon ../config/server.properties 


##启动后使用jps查看集群是否启动成功
jps

##在一台服务器上创建一个topic
/kafka-topics.sh --create --zookeeper 192.168.10.60:2181 --replication-factor 2 --partition 1 --topic test

## --replication-factor 2   #复制两份
## --partitions 1 #创建1个分区
## --topic #主题为shuaige

##在另外一台机器上创建一个生产者
./kafka-console-producer.sh  --broker-list 192.168.10.60:9092 --topic test

##在剩余的一台机器上创建一个消费者
./kafka-console-consumer.sh --bootstrap-server localhost:9094 --topic test --from-beginning

注:在kafka0.9之后不再使用--zookeeper 而是使用--bootstrap-server

生产者

在这里插入图片描述

消费者
在这里插入图片描述

你可能感兴趣的:(linux)