Linux环境下搭建kafka集群
准备工作
Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群。
下载安装包zookeeper-3.4.12和kafka_2.11-1.1.1。
软件环境
3台linux机器
创建目录并下载安装
1.创建目录
cd /usr/local/ #进入安装目录(自己定)
mkdir kafkacluster #创建项目目录
cd kafkacluster #进入kafkacluster 目录
2.解压软件
解压zookeeper和kafka安装包
将解压后目录改名为zookeeper和kafka
配置Zookeeper集群
cd zookeeper #进入zookeeper目录
mkdir data #存放快照日志
mkdir datalog #存放事物日志
cd conf目录 #进入conf目录
conf目录中的zoo_sample.cfg 这个文件是官方给的zookeeper的样板文件,复制一份命名为zoo.cfg保存在和样板文件同目录下。
打开zoo.cfg文件。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/kafkacluster/zookeeper/Data/data
dataLogDir=/usr/local/kafkacluster/zookeeper/Data/datalog
clientPort=2181
snapCount=10
server.1=192.168.0.1:2888:3888
server.2=192.168.0.2:2888:3888
server.3=192.168.0.3:2888:3888
其中各配置项的含义,解释如下:
tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
initLimit:集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
syncLimit:集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
dataDir:Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
服务器名称与地址:集群信息server.N=YYY:A:B(N:服务器编号,YYY:服务器地址,A:LF通信端口,B:选举端口)
创建myid文件
在(dataDir=/usr/local/kafkacluster/zookeeper/Data/data)创建一个myid文件,里面内容是server.N中的N(server.1里面内容为1)
另外两台机器同样配置,不过myid写为2和3。
测试Zookeeper集群
退出到zookeeper目录下。
分别启动zk
bin/zkServer.sh start conf/zoo,cfg
检查是否运行正常
bin/zkServer.sh status
下面的状态为启动成功。
ZooKeeper JMX enabled by default
Using config: /usr/local/kafkacluster/zookeeper/bin/../conf/zoo.cfg
Mode: follower
#Mode有两种类型:leader和follower,leader代表领导(主节点),follower代表下属(备节点)
#zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。
配置Kafka集群
cd kafka #进入kafka目录
mkdir kafkalogs #存放kafka日志
cd config目录 #进入config目录
打开server.properties文件。
broker.id=1 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样
port=9092 #当前kafka对外提供服务的端口默认是9092
host.name=192.168.0.1 #本机IP这个参数默认是关闭的
listeners=PLAINTEXT://192.168.0.1:9092 #监听的IP和端口
log.dirs=/opt/kafka/kafkalogs #消息存放的目录
zookeeper.connect=192.168.0.1:2181,192.168.0.1:2181,192.168.0.1:2181 #设置zookeeper的连接端口
上面是主要参数,如果需要调整配置可以修改下列参数或添加更多配置项:
num.network.threads=3 #这个是borker进行网络处理的线程数
num.io.threads=8 #这个是borker进行I/O处理的线程数
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压缩,一般不用启用,启用的话可以提高性能
另外两台机器同样配置,不过注意修改broker.id和ip。
启动Kafka集群并测试
1、启动服务
退出到kafka目录
分别执行bin/kafka-server-start.sh config/server.properties
2、测试kafka
#创建Topic
bin/kafka-topics.sh --create --zookeeper 192.168.0.1:2181 --replication-factor 2 --partitions 1 --topic test
--replication-factor 2 #副本个数
--partitions 1 #分区个数
--topic #主题为test
#启动一个生产者:
bin/kafka-console-producer.sh --broker-list 192.168.0.1:9092 --topic test
#启动一个消费者
bin/kafka-console-consumer.sh --zookeeper 192.168.0.1:2181 --topic test --from-beginning
在生产者发送一条消息,查看消费者是否有接收成功。接收成功后kafka集成环境搭建完成。