10.Kafka-Kraft 架构

Kafka-Kraft 架构

在这里插入图片描述

左图为 Kafka 现有架构,元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理。右图为 kraft 模式架构(实验性),不再依赖 zookeeper 集群,而是用三台 controller 节点代替 zookeeper,元数据保存在 controller 中,由controller 直接进行 Kafka 集群管理。这样做的好处有以下几个:

  • Kafka 不再依赖外部框架,而是能够独立运行;
  • controller 管理集群时,不再需要从 zookeeper 中先读取数据,集群性能上升;
  • 由于不依赖 zookeeper,集群扩展时不再受到 zookeeper 读写能力限制;
  • controller 不再动态选举,而是由配置文件规定。这样我们可以有针对性的加强controller 节点的配置,而不是像以前一样对随机 controller 节点的高负载束手无策。

Kafka-Kraft 集群部署

Kafka kraft是2.8+的新特性,所以安装的版本必须是2.8+。

下载kafka安装包

参考:Kafka官网下载地址

解压

tar -xvf kafka_2.12-3.2.0.tgz -C <安装目录>

修改配置文件

注:此处修改的是{kafkaHome}/config/kraft/server.properties的配置配置文件,而不是{kafkaHome}/config/server.properties文件。

#配置当前节点角色为broker还是controller。
#由于kraft模式不再依赖zk,所以controller的角色由kafka来充当。
#专用模式:broker或controller,共享模式:broker和controller
process.roles=broker,controller
#配置当前节点ID,整个集群环境中唯一。
node.id=1
#配置controller角色地址,多个角色用逗号隔开,格式:<node.id>@<listeners CONTROLLER的连接地址>
controller.quorum.voters=1@10.211.55.5:8092,2@10.211.55.5:8093,3@10.211.55.5:8094
#控制器名称,多个名称用逗号隔开。
controller.listener.names=CONTROLLER
#配置broker和controller监听地址
listeners=PLAINTEXT://:8082,CONTROLLER://:8092
advertised.listeners=PLAINTEXT://10.211.55.5:8082
#配置kafka数据存储目录
log.dirs=/opt/kafka_cluster2/kafka8082/kafka-datas

初始化集群数据目录

  1. 首先生成存储目录唯一 ID(可以重复使用),生成脚本:bin/kafka-storage.sh random-uuid
    在这里插入图片描述
  2. 用该 ID 格式化 kafka 存储目录。本质就是用于log.dirs目录下生成meta.properties文件的cluster.id。
# -t:指定随机生成的ID,-c:指定配置文件,这里是kraft目录下的文件
bin/kafka-storage.sh format -t ftFsKdj2QCu2HK9xKdjB3Q -c config/kraft/server.properties

启动服务

# -daemon:用守护进程后台启动服务。
# 这里指定的配置文件是kraft目录下的server.properties
bin/kafka-server-start.sh -daemon config/kraft/server.properties 

其他集群节点(node.id=2和node.id=3)按照此步骤部署和配置。

注:如果修改了kraft/server.properties文件之后启动失败,此时可能生成的元数据和原本的配置文件不匹配,需要删除log.dirs目录,再执行上一步(初始化集群数据目录)重新生成元数据。如果实在不能删除log.dirs目录下的数据,则需要根据启动失败的日志手动修改元数据内容,元数据保存在生成__cluster_metadata-0的目录下。

总结

kraft是kafka新推出的功能,该功能还未完善或存在bug,但是是未来发展的趋势。

我用的是kafka3.2.0版本,发现有以下bug:

  1. 我集群配置的是3台,但是我故意一台台启动,当启动两台的时候,kafka服务才能正常使用。
  2. 当我故意不启动第三台节点,能正常关掉第二台节点,此时第一台节点的日志显示一直在重试连接其他配置的controller节点,当我用kafka的命令或者kill命令尝试关闭第一台的进程,无论如何都关闭不了,只有当我启动其他controller节点的时候,第一台的节点才能关闭。
  3. 当三台服务一起启动,或者一起关闭的时候才没有以上奇奇怪怪的情况出现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NPException.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值