Bootstrap

apache-kafka-3.2.0k之kRaft模式集群安装

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
# 可用于选举的服务器
[email protected]:19093,[email protected]:29093,[email protected]: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
# 可用于选举的服务器
[email protected]:19093,[email protected]:29093,[email protected]: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
# 可用于选举的服务器
[email protected]:19093,[email protected]:29093,[email protected]: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

​ 生产者效果如下:image-producer
​ 消费者效果如下:image-consumer
​ 至此,kRaft模式的kafka集群搭建完成;

;