apache-kafka-3.2.0k之kRaft模式集群安装
本文将展示如何以kRaft模式安装apache-kafka-3.2.0集群
1 前言
zookeeper是一个天然的分布式协调组件,在大数据领域里有着广泛的运用,它的历史距现在也快20年了;它有一个较大的缺点就是对高并发读写支持不是很好,所以对于高并发读写性能要求较高的系统对zookeeper都是避而远之;最明显的一个例子,就是分布式注册中心现在都逐渐不依赖它了;
kafka从诞生之日起就一直依赖于zookeeper,最开始消费者消费的偏移量都是在zookeeper里保存,后来将偏移量的保存由kafka自己主题消息来实现;
在kafka2.8.0以后,kafka可以完全不依赖zookeeper了,提出了一个新的模式-kRaft;
使用kRaft模式的kafka集群,有以下优点:
- controller管理集群时,不需要在从zookeeper中先读取数据,集群性能上升
- 由于不依赖zookeeper,集群扩展不再在zookeeper读写能力的限制
- controller不再动态选举,而是由配置文件决定,这样我们可以有针对性的加强controller节点的配置
2 kRaft模式集群搭建
2.1 安装准备
-
JDK版本不低于 JDK 8
-
下载最新版本kafka,官方下载地址:https://kafka.apache.org/downloads
自行下载并上传至服务器,
或者直接下载:
wget https://archive.apache.org/dist/kafka/3.2.0/kafka_2.12-3.2.0.tgz -
解压到指定目录
tar -zxvf kafka_2.12-3.2.0.tgz -C /home/bigdata/apps
ln -s kafka_2.12-3.2.0 kafka
- 指定一台机器,ip示例如下:
192.168.123.103 - 当前操作用户为:bigdata
2.2 kafka节点安装
2.2.1 修改kRaft配置
这里准备一台机器来安装kafka集群,所以有三个配置文件;
kRraft配置在confit/kraft目录下,复制server.properties到三个文件,分别命名为server1.properties,server2.properties,server3.properties,
server1.properties修改的部分如下:
# 设置服务器角色 broker | controller
process.roles=broker,controller
# 类似brokerid,全局唯一,用于选举
node.id=1
inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER
# 可用于选举的服务器
controller.quorum.voters=1@192.168.123.103:19093,2@192.168.123.103:29093,3@192.168.123.103:39093
# 侦听ip,顾名思义,就是tcp的侦听ip。可以在某个固定的ip上侦听,也可以是全网段进行侦听(0.0.0.0)
listeners=PLAINTEXT://:19092,CONTROLLER://:19093
# 对外暴露,外部可访问
advertised.listeners=PLAINTEXT://192.168.123.103:19092
# 日志文件储存位置
log.dirs=/home/bigdata/data/kafka/c1
server2.properties修改的部分如下:
# 设置服务器角色 broker | controller
process.roles=broker,controller
# 类似brokerid,全局唯一,用于选举
node.id=2
inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER
# 可用于选举的服务器
controller.quorum.voters=1@192.168.123.103:19093,2@192.168.123.103:29093,3@192.168.123.103:39093
# 侦听ip,顾名思义,就是tcp的侦听ip。可以在某个固定的ip上侦听,也可以是全网段进行侦听(0.0.0.0)
listeners=PLAINTEXT://:29092,CONTROLLER://:29093
# 对外暴露,外部可访问
advertised.listeners=PLAINTEXT://192.168.123.103:29092
# 日志文件储存位置
log.dirs=/home/bigdata/data/kafka/c2
server3.properties修改的部分如下:
# 设置服务器角色 broker | controller
process.roles=broker,controller
# 类似brokerid,全局唯一,用于选举
node.id=3
inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER
# 可用于选举的服务器
controller.quorum.voters=1@192.168.123.103:19093,2@192.168.123.103:29093,3@192.168.123.103:39093
# 侦听ip,顾名思义,就是tcp的侦听ip。可以在某个固定的ip上侦听,也可以是全网段进行侦听(0.0.0.0)
listeners=PLAINTEXT://:39092,CONTROLLER://:39093
# 对外暴露,外部可访问
advertised.listeners=PLAINTEXT://192.168.123.103:39092
# 日志文件储存位置
log.dirs=/home/bigdata/data/kafka/c3
2.2.2 格式化kafka存储目录
# 生成储存目录唯一ID
./bin/kafka-storage.sh random-uuid
r6mU41pxSLyo3h2QoniGsQ
# 用该ID格式化kafka储存目录
./bin/kafka-storage.sh format -t r6mU41pxSLyo3h2QoniGsQ -c ./config/kraft/server1.properties
./bin/kafka-storage.sh format -t r6mU41pxSLyo3h2QoniGsQ -c ./config/kraft/server2.properties
./bin/kafka-storage.sh format -t r6mU41pxSLyo3h2QoniGsQ -c ./config/kraft/server3.properties
# 响应
./bin/kafka-storage.sh format -t r6mU41pxSLyo3h2QoniGsQ -c ./config/kraft/server1.properties
Formatting /home/bigdata/data/kafka/c1
./bin/kafka-storage.sh format -t r6mU41pxSLyo3h2QoniGsQ -c ./config/kraft/server2.properties
Formatting /home/bigdata/data/kafka/c2
./bin/kafka-storage.sh format -t r6mU41pxSLyo3h2QoniGsQ -c ./config/kraft/server3.properties
Formatting /home/bigdata/data/kafka/c3
cat /home/bigdata/data/kafka/c3/meta.properties
#
#Tue Jun 21 15:48:23 CST 2022
cluster.id=r6mU41pxSLyo3h2QoniGsQ
version=1
node.id=3
2.2.3 启动kafka集群
./bin/kafka-server-start.sh -daemon config/kraft/server1.properties
./bin/kafka-server-start.sh -daemon config/kraft/server2.properties
./bin/kafka-server-start.sh -daemon config/kraft/server3.properties
2.3 kafka消息测试
执行下面的命令:
# 创建topic
./bin/kafka-topics.sh --bootstrap-server 192.168.123.103:19092 --create --topic yx-test --partitions 1 --replication-factor 1
# 启动一个生产者发送数据
./bin/kafka-console-producer.sh --bootstrap-server 192.168.123.103:29092 --topic yx-test
# 启动消费者接收数据
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.123.103:39092 --topic yx-test
生产者效果如下:
消费者效果如下:
至此,kRaft模式的kafka集群搭建完成;