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服务器地址,多台用","间隔

posted @ 2021-12-11 13:56  爪洼师的机动人生  阅读(508)  评论(0)    收藏  举报