一、环境
在centos7.2系统下,使用3台服务器搭建集群
Server1:192.168.1.11
Server2:192.168.1.12
Server3:192.168.1.13
二、安装配置JDK
下载并安装JDK1.8版本,比较简单,此处不再介绍。
三、搭建zookeeper集群
Zookeeper集群的工作是超过半数才能对外提供服务,这里选择使用3台。
1、下载地址
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
2、创建目录(所有节点)
1)创建zookeeper安装目录
# mkdir -p /data/server
2)将zookeeper解压到安装目录
# tar -zxvf zookeeper-3.4.10.tar.gz -C /data/server
# mv /data/server/zookeeper-3.4.10 /data/server/zookeeper
3)新建保存数据的目录
# mkdir -p /data/server/zookeeper/data
4)新建日志目录
# mkdir -p /data/server/zookeeper/logs
3、配置环境变量并刷新(所有节点)
# vim /etc/profile
export ZK_HOME=/data/server/zookeeper
export PATH=$PATH:$ZK_HOME/bin
# source /etc/profile
4、配置zookeeper文件(所有节点)
# cd /data/server/zookeeper/conf/
# cp -f zoo_sample.cfg zoo.cfg
# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/server/zookeeper/data
dataLogDir=/data/server/zookeeper/logs
clientPort=2181
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
#第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888。
5、节点创建myid文件,节点对应id
在105机器上创建myid,并设置为1与配置文件zoo.cfg里面server.1对应。
echo "1" > /data/server/zookeeper/data/myid
在166机器上创建myid,并设置为2与配置文件zoo.cfg里面server.2对应。
echo "2" > /data/server/zookeeper/data/myid
在180机器上创建myid,并设置为3与配置文件zoo.cfg里面server.3对应。
echo "3" > /data/server/zookeeper/data/myid
6、服务启动与停止
# cd /data/server/zookeeper/bin/
6.1、启动zk
# ./zkServer.sh start
6.2、停止zk
# ./zkServer.sh stop
6.3、查看进程和状态
# netstat -lutnp |grep java
tcp 0 0 0.0.0.0:2181
# ./zkServer.sh status
7、设置开机自启动
vim /etc/rc.local 添加:
/data/server/zookeeper/bin/zkServer.sh start
四、部署kafka集群
1、下载地址
https://archive.apache.org/dist/kafka/0.11.0.2/kafka_2.12-0.11.0.2.tgz
2、创建目录(所有节点)
1)解压kafka
# tar -zxvf kafka_2.12-0.11.0.2.tgz -C /data/server/
# mv /data/server/kafka_2.12-0.11.0.2 /data/server/kafka
2)新建kafka日志目录
# mkdir -p /data/server/kafka/logs
3、修改配置文件(broker.id和两个listeners每个节点不一样,根据实际情况修改)
# cp -f /data/server/kafka/config/server.properties /data/server/kafka/config/server.properties.bak
# vim /data/server/kafka/config/server.properties
# 唯一标识在集群中的ID
broker.id=0
# 处理网络请求的最大线程数
num.network.threads=8
# 处理I/O请求的线程数
num.io.threads=3
#发送缓冲区buffer大小,数据不是一下子就发送的,先会存储到缓冲区到达一定的大小后在发送,能提高性能
socket.send.buffer.bytes=102400
# kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.receive.buffer.bytes=102400
# 这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
socket.request.max.bytes=104857600
# 消息日志存放的路径
log.dirs=/data/server/kafka/logs
# 默认的分区数,一个topic默认1个分区
num.partitions=3
# 启停时做日志恢复每个目录所需的线程数,采用RAID的时候可以增大该值
num.recovery.threads.per.data.dir=1
# 副本数或备份因子
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
# 默认为true,启用日志清理器进程在服务器上运行
log.cleaner.enable=true
# segment文件保留的最长时间,超时则被删除,默认7天
log.retention.hours=168
# # 单个分片的上限,达到该大小后会生成新的日志分片 1G
log.segment.bytes=1073741824
# 日志分片的检测时间间隔,每隔该时间会根据log保留策略决定是否删除log分片
log.retention.check.interval.ms=300000
# zookeeper集群信息
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
# zookeeper超时时间
zookeeper.connection.timeout.ms=6000
# 在开发测试环境下该值设置为0,保证启动后马上可以使用。但在生产环境下,默认值3秒更适合
group.initial.rebalance.delay.ms=3000
# 默认为true,启用删除主题。如果此配置已关闭,则通过管理工具删除主题将不起作用
delete.topic.enable=true
# 允许自动创建topic
auto.create.topics.enable=true
# 消息体的最大大小,单位是字节
message.max.byte=5242880
# 单个topic默认分区的replication个数,不能大于集群中broker的个数。
default.replication.factor=3
# replicas每次获取数据的最大字节数
replica.fetch.max.bytes=5242880
# broker 服务器要监听的地址及端口
listeners=PLAINTEXT://192.168.1.11:9092
# 这个是对外提供的地址 , 当client请求到kafka时, 会分发这个地址
advertised.listeners=PLAINTEXT://192.168.1.11:9092
4、启动kafka(3台都需要启动)
cd /data/server/kafka/bin/
./kafka-server-start.sh -daemon ../config/server.properties
5、检查是否启动成功
[root@localhost bin]# jps
19781 Kafka
6、常用命令行
查看集群状态:./kafka-topics.sh --describe --zookeeper 192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
查看主题列表:./kafka-topics.sh --list --zookeeper 192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
创建主题和消息:./kafka-console-producer.sh --broker-list 192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092 --topic test
订阅主题和消息:./kafka-console-consumer.sh --bootstrap-server 192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092 --topic test --from-beginning
删除主题及消息:./bin/kafka-topics --delete --zookeeper 192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181 --topic test
五、安装kafka-manager(仅在13机器上执行,偏向于对kafka集群的管理,可不安装)
1、下载地址
https://github.com/yahoo/kafka-manager
2、编译打包
# cd /usr/local
# git clone https://github.com/yahoo/kafka-manager
# cd kafka-manager
# ./sbt clean dist
3、安装配置(我这里有已经编译好的就不编译了)
# unzip kafka-manager-1.3.3.23.zip
# mv kafka-manager-1.3.3.23 kafka-manager
# vi /data/server/kafka-manager/conf/application.conf,修改kafka-manager.zkhosts
# kafka-manager.zkhosts="192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181"
4、启动kafka-manager(默认端口9000)
cd /data/server/kafka-manager/bin
nohup ./kafka-manager -Dconfig.file=/data/server/kafka-manager/conf/application.conf -Dhttp.port=9000 &
5、注意事项
/conf/logback.xml中的application.home未定义可以自己定义,启动会报找不到文件的错误,我这里加了一个全局变量如下:
<property name="application.home" value="/data/server/kafka-manager" />
6、进入web页面
http://192.168.1.13:9000/,添加cluster即可看到kafka集群信息了。
六、安装Kafka Monitor(仅在13机器上执行,偏向于对kafka运行情况的监控)
1、下载地址
https://download.csdn.net/download/gpf19950411/10469770?spm=1001.2014.3001.5503
因部分js需要翻墙,所以需要修改offsetapp目录中的index.html
<script src="//cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="//cdn.static.runoob.com/libs/angular.js/1.4.6/angular-route.js"></script>
<script src="//cdn.static.runoob.com/libs/angular.js/1.4.6/angular-resource.js"></script>
<script src="//cdn.staticfile.org/moment.js/2.5.1/moment.min.js"></script>
<script src="//cdn.staticfile.org/lodash.js/2.4.1/lodash.min.js"></script>
2、创建目录
mkdir -p /data/server/kafka-monitor
mkdir -p /data/server/kafka-monitor/logs
3、创建启动脚本
# cd /data/server/kafka-monitor
# vi start.sh
#!/bin/bash
# 默认port为8086
java -Xms512M -Xmx512M -Xss1024K -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -cp KafkaOffsetMonitor-assembly-0.2.1.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--zk 192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181 \
--port 7086 \
--refresh 10.seconds \
--retain 2.days \
--dbName offsetapp_kafka 1>logs/stdout.log 2>logs/stderr.log &
# chmod +x start.sh
# ./start.sh
4、进入监控界面
http://192.168.1.11:7086/