kafka高可用集群搭建
一、 准备工作
服务器
|
服务器 |
IP |
说明 |
|
kafka01 |
192.168.110.121 |
节点1 |
|
kafka02 |
192.168.110.122 |
节点2 |
|
kafka03 |
192.168.110.123 |
节点3 |
软件版本
|
项 |
说明 |
|
Linux Server |
CentOS 7 |
|
Kafka |
2.12-2.5.0 |
|
zookeeper |
3.5.9 |
|
JDK |
1.8-202 |
Linux操作用户:tom
二、 部署jdk
三台服务器均需部署
解压,配置环境变量。
# JDK环境变量设置
vim ~/.bash_profile
export JAVA_HOME=/home/tom/app/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source ~/.bash_profile
三、 部署zookeeper
1 zooKeeper基础准备
创建ZooKeeper相关目录
#创建应用目录
mkdir -p /home/tom/app/zookeeper
#创建数据目录
mkdir -p /home/tom/app/zookeeper/data
mkdir -p /home/tom/app/zookeeper/logs
#解压到指定目录
tar -zvxf apache-zookeeper-3.5.9-bin.tar.gz -C /home/tom/app/zookeeper
#改名
mv apache-zookeeper-3.5.9-bin apache-zookeeper-3.5.9
配置环境变量
#修改环境变量文件
vi ~/.bash_profile
#增加以下内容
export ZOOKEEPER_HOME=/home/tom/app/zookeeper/apache-zookeeper-3.5.9
export PATH=$ZOOKEEPER_HOME/bin:$PATH
#使环境变量生效
source ~/.bash_profile
#查看配置结果
echo $ZOOKEEPER_HOME
2 配置ZooKeeper
l zooKeeper基础配置(每个节点都配置)
#进入ZooKeeper配置目录
cd $ZOOKEEPER_HOME/conf
#新建配置文件
vi zoo.cfg
#写入以下内容并保存
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/tom/app/zookeeper/data
dataLogDir=/home/tom/app/zookeeper/logs
clientPort=2181
server.1=192.168.110.115:2888:3888
server.2=192.168.110.116:2888:3888
server.3=192.168.110.117:2888:3888
l 配置节点标识
kafka01:
echo "1" > /home/tom/app/zookeeper/data/myid
kafka02:
echo "2" > /home/tom/app/zookeeper/data/myid
kafka03:
echo "3" > /home/tom/app/zookeeper/data/myid
l 防火墙配置
#开放端口
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent
#重新加载防火墙配置
firewall-cmd --reload
#查看开发端口:
firewall-cmd --list-ports
3 启动ZooKeeper(每个节点都启动)
#启动
sh $ZOOKEEPER_HOME/bin/zkServer.sh start
出现以下字样表示启动成功:
ZooKeeper JMX enabled by default
Using config: /home/tom/app/zookeeper/apache-zookeeper-3.5.9/bin/../conf/zoo.cfg
Starting zookeeper … STARTED
4 查看ZooKeeper运行状态(每个节点都查看)
#使用如下命令查看每个节点的运行状态
sh $ZOOKEEPER_HOME/bin/zkServer.sh status
#状态信息
ZooKeeper JMX enabled by default
Using config: /home/tom/app/zookeeper/apache-zookeeper-3.5.9/bin/../conf/zoo.cfg
Mode: follower
#如果为领导者节点则Mode:leader
5 ZooKeeper常用配置项说明
|
配置项 |
名称 |
ken.io 的说明 |
|
tickTime |
CS通信心跳间隔 |
服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每间隔 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。 |
|
initLimit |
LF初始通信时限 |
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数 |
|
syncLimit |
LF同步通信时限 |
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数 |
|
dataDir |
数据文件目录 |
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里 |
|
dataLogDir |
日志文件目录 |
Zookeeper保存日志文件的目录 |
|
clientPort |
客户端连接端口 |
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求 |
|
server.N |
服务器名称与地址 |
从N开始依次为:服务编号、服务地址、LF通信端口、选举端口;例如:server.1=192.168.110.115:2888:3888 |
四、 部署Kafka
1 Kafka基础准备
创建Kafka相关目录
#创建应用目录
mkdir -p /home/tom/app/kafka
#创建数据目录
mkdir -p /home/tom/app/kafka/logs
#解压到应用目录
tar -zvxf kafka_2.12-2.5.0.tgz -C /home/tom/app/kafka
配置环境变量
#修改环境变量文件
vi ~/.bash_profile
#增加以下内容
export KAFKA_HOME=/home/tom/app/kafka/kafka_2.12-2.5.0
export PATH=$KAFKA_HOME/bin:$PATH
#使环境变量生效
source ~/.bash_profile
#查看配置结果
echo $KAFKA_HOME
2 Kafka节点配置
#进入应用目录
cd /home/tom/app/kafka/kafka_2.12-2.5.0
#修改配置文件
vi config/server.properties
l 通用配置(每个节点都配置)
配置日志目录、指定ZooKeeper服务器
# A comma separated list of directories under which to store log files
log.dirs=/home/tom/app/kafka/logs
# root directory for all kafka znodes.
zookeeper.connect=192.168.110.121:2181,192.168.110.122:2181,192.168.110.123:2181
l 分节点配置
Kafka01:
broker.id=0
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.110.121:9092
Kafka02:
broker.id=1
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.110.122:9092
Kafka03:
broker.id=2
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.110.123:9092
l 防火墙配置(root权限)
#开放端口
firewall-cmd --add-port=9092/tcp --permanent
#重新加载防火墙配置
firewall-cmd --reload
#查看开发端口:
firewall-cmd --list-ports
3 启动Kafka(每个节点都启动)
#启动
bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
#因为配置了环境变量,可以去掉前面的“bin/”,在任意路径下执行以上命令也行
#执行完成后使用jps命令查看kafka是否启动成功
[tom@kafka01 kafka]$ jps
6505 Kafka
6572 Jps
3023 QuorumPeerMain
4 Kafka测试
l 创建Topic
# Topic在kafka01上创建后也会同步到集群中另外两个Broker,创建的2个副本,3个分区的Topic
bin/kafka-topics.sh --create --bootstrap-server 192.168.110.121:9092 --replication-factor 2 --partitions 3 --topic test
l 查看Topic
bin/kafka-topics.sh --list --bootstrap-server 192.168. 110. 121:9092
l 发送消息
bin/kafka-console-producer.sh --broker-list 192.168. 110. 121:9092 --topic test
#消息内容
> test by admin
l 消费消息
#在Kafka02上消费Broker03的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.110.123:9092 --topic test --from-beginning
#在Kafka03上消费Broker02的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.110.122:9092 --topic test --from-beginning
#然后均能收到消息
test by admin
#这是因为这两个消费消息的命令是建立了两个不同的Consumer
#如果我们启动Consumer指定Consumer Group
Id就可以作为一个消费组协同工,1个消息同时只会被一个Consumer消费到
bin/kafka-console-consumer.sh --bootstrap-server 192.168.110.122:9092 --topic test --from-beginning --group testgroup_ken
bin/kafka-console-consumer.sh --bootstrap-server 192.168.110.123:9092 --topic test --from-beginning --group testgroup_ken
5 Kafka常用配置项说明
Kafka常用Broker配置说明:
|
配置项 |
默认值/示例值 |
说明 |
|
broker.id |
0 |
Broker唯一标识 |
|
listeners |
PLAINTEXT://192.168.110.121:9092 |
监听信息,PLAINTEXT表示明文传输 |
|
log.dirs |
kafka/logs |
kafka数据存放地址,可以填写多个。用","间隔 |
|
message.max.bytes |
message.max.bytes |
单个消息长度限制,单位是字节 |
|
num.partitions |
1 |
默认分区数 |
|
log.flush.interval.messages |
Long.MaxValue |
在数据被写入到硬盘和消费者可用前最大累积的消息的数量 |
|
log.flush.interval.ms |
Long.MaxValue |
在数据被写入到硬盘前的最大时间 |
|
log.flush.scheduler.interval.ms |
Long.MaxValue |
检查数据是否要写入到硬盘的时间间隔。 |
|
log.retention.hours |
24 |
控制一个log保留时间,单位:小时 |
|
zookeeper.connect |
192.168.110.121:2181 |
ZooKeeper服务器地址,多台用","间隔 |

浙公网安备 33010602011771号