Linux环境下搭建kafka集群

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集成环境搭建完成。

你可能感兴趣的:(kafka,kafka)