本文将展示如何以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节点的配置
-
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
这里准备一台机器来安装kafka集群,所以有三个配置文件;
kRraft配置在confit/kraft目录下,复制server.properties到三个文件,分别命名为server1.properties,server2.properties,server3.properties,
server1.properties修改的部分如下:
# 设置服务器角色 broker | controller process.roles=broker,controller # 类似brokerid,全局唯一,用于选举 node.id=1 # 可用于选举的服务器 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 # 可用于选举的服务器 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 # 可用于选举的服务器 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/c32.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=32.2.3 启动kafka集群
./bin/kafka-server-start1.sh -daemon config/kraft/server1.properties ./bin/kafka-server-start2.sh -daemon config/kraft/server2.properties ./bin/kafka-server-start3.sh -daemon config/kraft/server3.properties2.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集群搭建完成;



