[转帖]无需 zookeeper 安装 kafka 集群 (kakfa3.0 版本)

无需,zookeeper,安装,kafka,集群,kakfa3,版本 · 浏览次数 : 0

小编点评

**kafka2.0 和 3.0 在集群实例角色规划上的区别** | 特征 | kafka2.0 | kafka3.0 | |---|---|---| | Controller 主控器的选举机制 | zookeeper | kraft | | 集群元数据存储 | zookeeper | kafka 日志 | | 配置文件格式 | kafka2.0 配置文件 | kafka 配置文件 | | 格式化存储目录 | 在配置中创建 | 运行命令格式化 | | 启动集群脚本 | 运行启动脚本 | 运行命令格式化 | | 一键停止集群脚本 | 与启动脚本相同 | 与启动脚本相同 | **集群实例角色规划步骤** 1. 配置集群参数,包括集群 ID、节点名称、IP地址等。 2. 根据角色规划,设置节点的配置参数,例如 broker 配置、服务器地址等。 3. 格式化存储目录,生成集群 ID 文件。 4. 启动集群脚本,并执行节点的配置和启动操作。 5. 使用 `kafka-server-stop.sh` 命令一键停止集群。 6. 运行 `kafka-storage.sh` 命令格式化存储目录。

正文

https://xie.infoq.cn/article/7769ef4576a165f7bdf142aa3

一、kafka 集群实例角色规划

在 kafka3.0 中已经可以将 zookeeper 去掉,使用 kraft 机制实现 controller 主控制器的选举。所以我们先简单了解下 kafka2.0 和 3.0 在这方面的区别。

 

 

上图中黑色代表 Broker(消息代理服务),褐色/蓝色代表 Controller(集群控制器)

 

  • 左图(kafka2.0):一个集群所有节点都是 Broker 角色,利用 zookeeper 的选举能力从三个 Broker 中选举出来一个 Controller 控制器,同时控制器将集群元数据信息(比如主题分类、消费进度等)保存到 zookeeper,用于集群各节点之间分布式交互。

  • 右图(kafka3.0):假设一个集群有四个 Broker,配置指定其中三个作为 Conreoller 角色(蓝色)。使用 kraft 机制实现 controller 主控制器的选举,从三个 Controller 中选举出来一个 Controller 作为主控制器(褐色),其他的 2 个备用。zookeeper 不再被需要。相关的集群元数据信息以 kafka 日志的形式存在(即:以消息队列消息的形式存在)。

 

理解了上面的右图,我们就不难理解在搭建 kafka3.0 集群之前,我们需要先做好 kafka 实例角色规划。(四个 Broker,需要通过主动配置指定三个作为 Controller,Controller 需要奇数个,这一点和 zk 是一样的)

 

 

二、准备工作

  • 在 kafka 用户(新建的 kafka 用户,不要使用 root 用户)下新建一个目录作为 kafka3 安装目录,并使用 wget 下载一个 3.10 版本的安装包。

 

 
$mkdir kafka3-setup;$ cd kafka3-setup/;$ wget https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
 
 
 
复制代码
 

 

  • kafka3.0 不再支持 JDK8,建议安装 JDK11 或 JDK17,事先安装好。

  • 新建 1 个目录用于保存 kafka3 的持久化日志数据,比如:mkdir -p /home/kafka/data/kafka3;,并保证安装 kafka 的用户具有该目录的读写权限。

  • (这里需要使用 root 用户)所有安装 kafka3 服务器实例防火墙开放 9092、9093 端口,使用该端口作为 controller 之间的通信端口。该端口的作用与 zk 的 2181 端口类似。

  • 下载完成安装包之后,解压到/home/kafka目录下。也可以修改-C参数自定义解压路径,如果自定义路径,注意路径下的新建的 kafka 用户的操作权限。

 

 
tar -xzvf ./kafka_2.13-3.1.0.tgz -C /home/kafka
 
 
 
复制代码
 

三、修改 Kraft 协议配置文件

在 kafka3.0 版本中,使用 Kraft 协议代替 zookeeper 进行集群的 Controller 选举,所以要针对它进行配置,配置文件在 kraft 目录下,这与 kafka2.0 版本依赖 zookeeper 安装方式的配置文件是不同的。

 

 
vim /home/kafka/kafka_2.13-3.1.0/config/kraft/server.properties
 
 
 
复制代码
 

 

具体的配置参数如下:

 

 
node.id=1process.roles=broker,controllerlisteners=PLAINTEXT://zimug1:9092,CONTROLLER://zimug1:9093advertised.listeners = PLAINTEXT://:9092controller.quorum.voters=1@zimug1:9093,2@zimug2:9093,3@zimug3:9093log.dirs=/home/kafka/data/kafka3
 
 
 
复制代码
 

 

  • node.id:这将作为集群中的节点 ID,唯一标识,按照我们事先规划好的(上文),在不同的服务器上这个值不同。其实就是 kafka2.0 中的broker.id,只是在 3.0 版本中 kafka 实例不再只担任 broker 角色,也有可能是 controller 角色,所以改名叫做 node 节点。

  • process.roles:一个节点可以充当 broker 或 controller 或两者兼而有之。按照我们事先规划好的(上文),在不同的服务器上这个值不同。多个角色用逗号分开。

  • listeners:broker 将使用 9092 端口,而 kraft controller 控制器将使用 9093 端口。

  • advertised.listeners:这里指定 kafka 通过代理暴漏的地址,如果都是局域网使用,就配置PLAINTEXT://:9092即可。

  • controller.quorum.voters:这个配置用于指定 controller 主控选举的投票节点,所有process.roles包含 controller 角色的规划节点都要参与,即:zimug1、zimug2、zimug3。其配置格式为:node.id1@host1:9093,node.id2@host2:9093

  • log.dirs:kafka 将存储数据的日志目录,在准备工作中创建好的目录。

 

所有 kafka 节点都要按照上文中的节点规划进行配置,完成config/kraft/server.properties配置文件的修改。

三、格式化存储目录

生成一个唯一的集群 ID(在一台 kafka 服务器上执行一次即可),这一个步骤是在安装 kafka2.0 版本的时候不存在的。

 

 
$ /home/kafka/kafka_2.13-3.1.0/bin/kafka-storage.sh random-uuidSzIhECn-QbCLzIuNxk1A2A
 
 
 
复制代码
 

 

使用生成的集群 ID+配置文件格式化存储目录log.dirs,所以这一步确认配置及路径确实存在,并且 kafka 用户有访问权限(检查准备工作是否做对)。每一台主机服务器都要执行这个命令

 

 
 /home/kafka/kafka_2.13-3.1.0/bin/kafka-storage.sh format \-t SzIhECn-QbCLzIuNxk1A2A \-c /home/kafka/kafka_2.13-3.1.0/config/kraft/server.properties
 
 
 
复制代码
 

 

格式化操作完成之后,你会发现在我们定义的log.dirs目录下多出一个 meta.properties 文件。meta.properties 文件中存储了当前的 kafka 节点的 id(node.id),当前节点属于哪个集群(cluster.id

 

 
$ cat /home/kafka/data/kafka3/meta.properties##Tue Apr 12 07:39:07 CST 2022node.id=1version=1cluster.id=SzIhECn-QbCLzIuNxk1A2A
 
 
 
复制代码
 

四、 启动集群,完成基础测试

zimug1 zimug2 zimug3是三台应用服务器的主机名称(参考上文中的角色规划),在 linux 的`/etc/hosts`主机名与 ip 进行关系映射。将下面的命令集合保存为一个 shell 脚本,并赋予执行权限。执行该脚本即可启动 kafka 集群所有的节点,使用该脚本前提是:你已经实现了集群各节点之间的 ssh 免密登录。

 

 
#!/bin/bashkafkaServers='zimug1 zimug2 zimug3'#启动所有的kafkafor kafka in $kafkaServersdo    ssh -T $kafka <<EOF    nohup /home/kafka/kafka_2.13-3.1.0/bin/kafka-server-start.sh /home/kafka/kafka_2.13-3.1.0/config/kraft/server.properties 1>/dev/null 2>&1 &EOFecho 从节点 $kafka 启动kafka3.0...[ done ]sleep 5done
 
 
 
复制代码
 

 

如果你的安装路径和我不一样,这里/home/kafka/kafka_2.13-3.1.0需要修改一下。

五、一键停止集群脚本

一键停止 kafka 集群各节点的脚本,与启动脚本的使用方式及原理是一样的。使用该脚本前提是:你已经实现了集群各节点之间的 ssh 免密登录。

 

 
#!/bin/bashkafkaServers='zimug1 zimug2 zimug3'#停止所有的kafkafor kafka in $kafkaServersdo    ssh -T $kafka <<EOF
cd /home/kafka/kafka_2.13-3.1.0 bin/kafka-server-stop.shEOFecho 从节点 $kafka 停止kafka...[ done ]sleep 5done

与[转帖]无需 zookeeper 安装 kafka 集群 (kakfa3.0 版本)相似的内容:

[转帖]无需 zookeeper 安装 kafka 集群 (kakfa3.0 版本)

https://xie.infoq.cn/article/7769ef4576a165f7bdf142aa3 一、kafka 集群实例角色规划 在 kafka3.0 中已经可以将 zookeeper 去掉,使用 kraft 机制实现 controller 主控制器的选举。所以我们先简单了解下 kaf

[转帖]无需 zookeeper 安装 kafka 集群 (kakfa3.0 版本)

https://xie.infoq.cn/article/7769ef4576a165f7bdf142aa3 一、kafka 集群实例角色规划 在 kafka3.0 中已经可以将 zookeeper 去掉,使用 kraft 机制实现 controller 主控制器的选举。所以我们先简单了解下 kaf

[转帖]GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目JeecgBoot有点强

GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目JeecgBoot有点强 https://www.cnblogs.com/05-hust/p/14515686.html 一、项目介绍: JeecgBoot 是一款基于代码生成器的低代码开发平台!前后端分离架构 Spring

[转帖]实用小技能:一键获取Harbor中镜像信息,快捷查询镜像

【摘要】一键获取Harbor中的镜像列表,无需登录harbor UI,也可批量下载镜像到本地并保存为tar包。本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接: https://github.com/weopenprojects/WeOpen-Star 前言 我们要查询Harbor中某个项

[转帖]存储极客:服务器SSD RAID性能速查手册

https://aijishu.com/a/1060000000124241 存储 本文内容非商业用途可无需授权转载,请务必注明作者及本微信公众号、微博ID:唐僧\_huangliang,以便更好地与读者互动。 我曾经不只一次看到有朋友提出以下问题: 1. SSD做RAID性能如何,RAID卡会成为

[转帖]火焰图基本使用教程

火焰图基本使用教程 1. 基本流程 下载FlameGrapth包:https://github.com/brendangregg/FlameGraph,无需安装,直接使用。也可以直接使用命令git clone https://github.com/brendangregg/FlameGraph.gi

[转帖]Linux中的零拷贝技术

https://www.jianshu.com/p/a757a93b6e5f 内存映射--mmap 内核和用户空间,共享内存。数据copy到内核区后,只需要把地址共享给应用程序即可,无需再copy一次数据到用户空间。 image.png 优点: 用户程序可以读取和修改共享内存的数据,就像读取用户空间

[转帖]【KVM】KVM和QEMU的关系及区别

KVM架构 KVM(Kernel-based Virtual Machine)包含一个为处理器提供底层虚拟化、可加载的核心 模块kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作为虚拟机上层 控制工具。KVM无需改变Linux或Windows系统就能运

[转帖]自动化回归测试工具 —— AREX 上手实践

https://my.oschina.net/arextest/blog/8589156 AREX 是一款开源的自动化测试工具平台,基于 Java Agent 技术与比对技术,通过流量录制回放能力实现快速有效的回归测试。同时提供了接口测试、接口比对测试等丰富的自动化测试功能,无需编程能力也可快速上手

[转帖]VMware Workstation PRO 17.0.2正式版+激活密钥

https://www.isharepc.com/36181.html VMware Workstation PRO 17是一个简化的桌面虚拟化应用程序。 它在同一台计算机上运行一个或多个操作系统而无需重新启动。 VMware Workstation PRO具有简单的用户界面,提供无与伦比的操作系统