【大数据之Kafka】十五、Kafka-Kraft模式

2023-09-20 15:30:00

1 Kafka-Kraft架构

在这里插入图片描述
  左图为 Kafka 现有架构,元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理。
  右图为 kraft 模式架构(实验性),不再依赖 zookeeper 集群,而是用三台 controller 节点代替 zookeeper,元数据保存在 controller 中,由 controller 直接进行 Kafka 集群管理。

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

2 Kafka-Kraft集群部署

(1)再解压一份Kafka安装包。

tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/

(2)重命名为kafka2。

mv kafka_2.12-3.0.0/ kafka2

(3)在 hadoop102 上修改/opt/module/kafka2/config/kraft/server.properties 配置文件。

#kafka 的角色(controller 相当于主机、broker 节点相当于从机,主机类似 zk 功能)
process.roles=broker, controller
#节点 ID
node.id=2

#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=2@hadoop102:9093,3@hadoop103:9093,4@hadoop104:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://hadoop102:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/opt/module/kafka2/data

(4)分发kafka2,在 hadoop103 和 hadoop104 上需要对 node.id 相应改变, 值需要和controller.quorum.voters 对应。在 hadoop103 和 hadoop104 上需要 根据各自的主机名称,修改相应的advertised.Listeners 地址。

(5)初始化集群数据目录,首先生成存储目录唯一 ID。

 bin/kafka-storage.sh random-uuid

在这里插入图片描述
(6)用该 ID 格式化 kafka 存储目录(三台节点)。

[lyx@hadoop102 kafka2]$ bin/kafka-storage.sh format -t 7NSm-xjRRGu3hj-4bA0qMw -c /opt/module/kafka2/config/kraft/server.properties

[lyx@hadoop103 kafka2]$ bin/kafka-storage.sh format -t 7NSm-xjRRGu3hj-4bA0qMw -c /opt/module/kafka2/config/kraft/server.properties

[lyx@hadoop104 kafka2]$ bin/kafka-storage.sh format -t 7NSm-xjRRGu3hj-4bA0qMw -c /opt/module/kafka2/config/kraft/server.properties

(7)启动Kafka集群。

[lyx@hadoop102 kafka2]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties

[lyx@hadoop103 kafka2]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties

[lyx@hadoop104 kafka2]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties

在这里插入图片描述
(8)停止Kafka集群。

[lyx@hadoop102 kafka2]$ bin/kafka-server-stop.sh

[lyx@hadoop103 kafka2]$ bin/kafka-server-stop.sh

[lyx@hadoop104 kafka2]$ bin/kafka-server-stop.sh

3 Kafka-Kraft集群启停脚本

(1)在/home/用户名/bin目录下创建文件kf2.sh脚本。

#!/bin/bash
case $1 in
"start"){
    for i in hadoop102 hadoop103 hadoop104
    do
        echo " --------启动 $i Kafka2-------"
        ssh $i "/opt/module/kafka2/bin/kafka-server-start.sh -
daemon /opt/module/kafka2/config/kraft/server.properties"
    done
};;
"stop"){
    for i in hadoop102 hadoop103 hadoop104
    do
        echo " --------停止 $i Kafka2-------"
        ssh $i "/opt/module/kafka2/bin/kafka-server-stop.sh "
    done
};;
esac

(2)添加执行权限。

chmod 777 kf2.sh

(3)启动集群命令。

kf2.sh start

(4)停止集群命令。

kf2.sh stop
更多推荐

DMNet复现(一)之数据准备篇:Density map guided object detection in aerial image

一、生成密度图密度图标签生成采用以下代码,生成训练集密度图gt:importcv2importglobimporth5pyimportscipyimportpickleimportnumpyasnpfromPILimportImagefromitertoolsimportislicefromtqdmimporttqdm

Git常见的面试题

在软件开发领域,Git是一个极为重要的版本控制系统,几乎每个开发者都需要掌握它。因此,在面试过程中,Git常常成为了面试官们用来考察候选人技能和经验的重要工具之一。以下是一些常见的Git面试题,希望它们能帮助你在面试中脱颖而出。什么是Git?Git是一个分布式版本控制系统,用于跟踪和管理软件项目的变化。它允许多人协作开

Kafka 源码分析——Producer

文章目录前言Producer整体流程Producer初始化Producer发送流程执行拦截器逻辑获取集群元数据序列化选择分区消息累加进缓存消息发送Producer缓冲区Producer参数调优前言在Kafka中,把产生消息的一方称为Producer即生产者,它是Kafka的核心组件之一,也是消息的来源所在。它的主要功能

千兆以太网网络层 ARP 协议的原理与 FPGA 实现

文章目录前言一、ARP帧的应用场景和存在目的二、ARP帧工作原理三、以太网ARP帧发包实例设计四、以太网CRC校验代码五、以太网ARP帧发包测试---GMII1.模拟数据发送2.仿真模块3.仿真波形六、以太网ARP帧发包测试---RGMII1.顶层文件2.仿真代码七、上板测试(RGMII)前言本节对以太网电路接口和以太

中级职称评审论文重要吗?是不是必须要论文呢?

现在评中级职称职称对论文有什么要求?没有论文可以参与职称评审吗?建筑中级职称怎么评?那自然是从多方面来考核人才是否具备了评中级工程师的能力,职称论文就是考核的标准之一。甘建二告诉你,现在评职称论文是很重要的,没有论文职称是通过不了的,所以评职称的小伙伴,首先建议您这边先考虑发表论文,湖北这边职称评审对于论文的一个要求是

多语言多平台给线程增加命名

在许多编程语言和多线程库中,可以为线程分配一个名称以便更好地识别和调试线程。以下是在一些常见编程语言中如何为线程增加命名的示例:1.Python(使用threading模块):在Python中,你可以使用threading模块来创建和管理线程。要为线程增加名称,可以在创建线程对象时指定name参数:importthre

[C++随笔录] vector使用

vector使用初始化排序算法reverse和resize通过上一篇文章string的模拟实现,其实我们就已经踏入了STL的门槛.STL容器的大致用法是差不多的⇒那我们这篇博客就讲一点跟string类不一样的新颖的东西初始化跟string一样,vector可以采用下面的形式初始化//默认空间,默认初始化vector<i

瑞芯微:基于RK3568的ocr识别

光学字符识别(OpticalCharacterRecognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。亦即将图像中的文字进行识别,并以文本的形式返回。OCR的应用场景卡片证件识别类:大陆、港澳台身份证、通行证、护照识别,卡类识别,车辆类驾驶证识别、行驶证识别,执照识类识别,企

浅谈GPGPU任务调度-1

文章目录前言1.Stream的概念1.文献1的工作2.Hyper-Q的改进前言转自GPUandComputing公众号在先前的文章中《近距离看GPU计算(2)》我们介绍了GPUSM单元以ThreadBlock为单位的调度方法,这些的Block属于同一个kernel任务,当然处于相同的进程上下文(CUDAContext)

什么是BDD测试(行为驱动开发测试)?

1、什么是BDD测试?BDD(BehaviorDrivenDevelopment)测试,即行为驱动开发测试,是一种基于用户行为和需求的软件测试方法。通过将测试用例编写为自然语言脚本,BDD测试可以促进业务需求、开发和测试团队之间的沟通和协作,从而提高代码的可读性、可维护性和可重复性。BDD测试的优点在于,它能够将开发、

微信小程序与idea后端如何进行数据交互

交互使用的其实就是调用的req.get('url')方法进行路径访问,你要先保证自己的springboot项目已经成功运行了:如下:如何交互的?微信小程序:如下为index.js页面在onLoad()事件中调用方法Project.findAllCities()要在当前js页面中先引入project.js别名Projec

热文推荐