KRaft面试思路引导

news2025/4/22 21:07:08

Kafka实在2.8之后就用KRaft进行集群管理了

Conroller负责选举Leader,同时Controller管理集群元数据状态信息,并将元数据信息同步给各个分区的Leader

和Zookeeper管理一样,会选出一个Broker作为Controller去管理整个集群,但是元数据存储不同了

Zookeeper是树形结构存储,为每个ZNode,每个分区有一个ZNode节点

而KRaft就是用日志存储的,Controller中会有个单分区的内部主题_cluster_metadata存储元数据信息


Zookeeper本身的限制

Zookeeper写操作串行的限制

Zookeeper 的写操作(如分区选举、Controller 变更)是串行的,成为性能瓶颈,尤其在集群规模大时(如数十万分区)

ZK 模式 下,Kafka 的元数据(如分区选举、Controller 变更)依赖 ZooKeeper 存储,而 ZooKeeper 的所有写操作都是串行化的

ZooKeeper 集群有一个 Leader 节点(通过 ZAB 协议选举),所有写请求(无论来自哪个 Kafka Broker)都必须由 Leader 处理

Zookeeper单线程回调机制

事件触发
当节点发生变化(如 Broker 宕机,节点被删除),ZooKeeper 会生成一个 Watcher 事件(如 NodeDeleted

事件派发
ZooKeeper 服务端将事件放入单线程队列,由 单线程的 EventThread 依次执行回调(通知 Kafka Controller)

Zookeeper模型存储限制

Zookeeper 的存储模型限制了 Kafka 分区数量的扩展(如单 Zookeeper 集群难以支撑百万级分区)

Zookeeper使用树形结构存储元数据,百万个分区就有百万个ZNode节点,会导致内存占用激增

并且Zookeeper必须将所有ZNode加载到内存中,容易OOM+停顿

Zookeeper的单Controller机制

Zookeeper是单Controller机制,Controller选举的时候没有备用方案而是所有的Broker都去参与选举,选举过程不稳定还会有脑裂问题

KRaft 中有类似备用 Controller 的概念,有一个主Controller和多个Controller副本。在 KRaft 协议中,会有一个 Leader 作为主要的 Controller 负责管理和协调工作,同时存在多个 Follower 节点可以在 Leader 出现故障时快速切换成为新的 Leader(即新的 Controller)


KRaft对比Zookeeper的优势

存储方式+并发+Controller副本机制(Kraft的性能更好)

1.日志管理元数据,支持并发写,解决Zookeeper单线程写限制。因为Kafka的Offeset的频繁更新会有大量的写操作,Zookeeper单线程写性能不足

2.Kafka将offset和元数据分开存储,而zookeeper将offset和元数据都存到ZNode中,offset写频繁,元数据读频繁,两者分开存储会提高系统效率

3.Kafka支持执行命令后并发通知,解决Zookeeper单线程回调机制

4.KRaft是一种选举算法,不像Zookeeper有本身系统的限制

KRaft中将Kafka工作产生的日志都放到了一个单分区的内部主题_cluster_metadata

Zookeeper使用树形结构存储元数据,百万个分区就有百万个ZNode节点,会导致内存占用激增。并且Zookeeper必须将所有ZNode加载到内存中,容易OOM+停顿

5.KRaft是单主Controller+多个Controller副本,在Controller宕机后能迅速用副本恢复。而Zookeeper是单Controller机制,选举过程很慢,同时还会有脑裂问题的出现

6.Follower同步Leader机制从原本的ISR机制变成了少数服从多数投票机制


Raft和KRaft的不同

Raft算法使用推模式同步

KRaft算法使用拉模式同步

新角色Observer

因为KRaft是节点是主动去拉取日志,所以对比之前的Leader和Follower角色,还多出了一个Observer角色去Leader中去拉取日志

其实这个角色只是一个抽象的模型,实际上就是Broker去拉取日志而已


KRaft为什么不用推模式?KRaft和Raft的优缺点

Raft因为是推模式,所以节点同步的实时性会更好,但是没有考虑Follower的性能+消费能力,可能会造成压力

KRaft因为是拉模式,所以节点实时性不强,但是Follower会根据自身情况控制消费速度,减轻自身压力防止系统资源浪费

但是实际上,KRaft因为是适配Kafka的,Kafka本身日志同步就是拉模式,所以KRaft也改成拉模式了


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS菜鸟入门(六)·移植FreeRTOS到STM32

目录 1. 获取裸机工程模版 2. 下载 FreeRTOS V9.0.0 源码 3. FreeRTOS文件夹内容简介 3.1 FreeRTOS文件夹 3.1.1 Demo文件夹 3.1.2 License 文件夹 3.1.3 Source 文件夹 3.2 FreeRTOS-Plus 文件夹 4. 往裸机工程添加 FreeRTOS 源码 5. 拷贝 FreeRTOSConfig…

14.第二阶段x64游戏实战-分析人物的名字

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:13.第二阶段x64游戏实战-分析人物等级和升级经验 名字(中文英文符号…

【CS*N是狗】亲测可用!!WIN11上禁用Chrome自动更新IDM插件

现象:每次打开chrome后IDM会弹出提示插件版本不一致。经过排查后发现是chrome把IDM插件给更新了,导致IDM提示版本不匹配。经过摸索后,得到了可行的方案。 第一步,打开Chrome,把IDM插件卸载掉,然后重新安装I…

漫游git rebase + 浅谈git checkout和git branch -f的分支命令

今天学了两个命令非常有意思:一个是git checkout,一个是git branch -f。我们可以认为在提交树上,任何一个节点代表着一次提交。并且,git commit将会在 H E A D HEAD HEAD指针指向的节点上进行进一步提交。将每一个分支名视为标记当…

深入理解 React 组件的生命周期:从创建到销毁的全过程

React 作为当今最流行的前端框架之一,其组件生命周期是每个 React 开发者必须掌握的核心概念。本文将全面剖析 React 组件的生命周期,包括类组件的各个生命周期方法和函数组件如何使用 Hooks 模拟生命周期行为,帮助开发者编写更高效、更健壮的…

OpenCV 图形API(44)颜色空间转换-----将图像从 BGR 色彩空间转换为 RGB 色彩空间函数BGR2RGB()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从BGR色彩空间转换为RGB色彩空间。 该函数将输入图像从BGR色彩空间转换为RGB。B、G和R通道值的常规范围是0到255。 输出图像是8位无符号3通…

配置nginx服务,通过多ip区分多网站

首先关闭防火墙,setenforce 0 关过了,不截图了 多IP,首先配置多个IP地址 可以在vm增加虚拟网卡,也可以在同一网卡配置多个IP,我用第一种 记得点确定 查看新的虚拟网卡IP 没有IP,配置一个 安装nginx 写配置 server{listen 192.168.214.130:80;root /www/ip/130; # 资源根目…

[k8s实战]Containerd 1.7.2 离线安装与配置全指南(生产级优化)

[k8s实战]Containerd 1.7.2 离线安装与配置全指南(生产级优化) 摘要:本文详细讲解在无外网环境下部署 Containerd 1.7.2 容器运行时的完整流程,涵盖二进制包安装、私有镜像仓库配置、Systemd服务集成等关键步骤,并提供…

解决Windows安全中心显示空白页面

1、电脑重装系统后,发现原本一些软件打不开了,电脑莫名认为有病毒,自动删除插件。附图。 2、第一反应是电脑防火墙的原因,默认威胁防护识别到了病毒软件,自动删除。在开始屏幕搜Windows安全中心,打开之后发…

【MQ篇】初识MQ!

目录 一、什么是MQ?简单来说就是个“快递中转站” 📦二、为什么要用MQ?用了它,好处多多!🤩三、MQ的应用场景:各行各业都能用!🌍四、MQ的优缺点:硬币的两面&am…

2、SpringAI接入ChatGPT与微服务整合

2、SpringAI接入ChatGPT与微服务整合 小薛博客AI 大模型资料 1、SpringAI简介 https://spring.io/projects/spring-ai Spring AI是一个人工智能工程的应用框架。其目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于人工智能领域&#…

榕壹云预约咨询系统:基于ThinkPHP+MySQL+UniApp打造的灵活预约小程序解决方案

数字化咨询场景的痛点与解决方案 在心理咨询、医疗问诊、法律咨询等需要预约服务的场景中,传统线下预约存在效率低、管理复杂、资源分配不均等问题。榕壹云预约咨询系统基于ThinkPHPMySQLUniApp技术栈开发,为咨询类行业提供了一套高效、安全、可扩展的数…

opencv 图像矫正的原理

图像矫正的原理是透视变换,下面来介绍一下透视变换的概念。 听名字有点熟,我们在图像旋转里接触过仿射变换,知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程,转换过程坐标点的相对位置和属性不发生变换,…

计算机前沿技术课程论文 K-means算法在图像处理的应用

K-means算法在图像处理的应用 这是本人在计算机前沿技术课程中的课程论文文章,为了方便大家参考学习,我把完整的论文word文档发到了我的资源里,有需要的可以自取。 点击完整资源链接 目录 K-means算法在图像处理的应用摘要:引言1…

WSL2-Ubuntu22.04安装URSim5.21.3

WSL2-Ubuntu22.04安装URSim5.21.3 准备安装启动 准备 名称版本WSL2Ubuntu22.04URSim5.21.3VcXsrvNaN WSL2安装与可视化请见这篇:WSL2-Ubuntu22.04-配置。 安装 我们是wsl2-ubuntu22.04,所以安装Linux版本的URSim,下载之前需要注册一下,即…

blender 录课键位显示插件(图文傻瓜式安装)

1、下载 点击这个链接进行下载https://github.com/nutti/Screencast-Keys 下载好不用解压 2、安装 打开blender进行安装 点击编辑选择偏好设置 选择插件再点击这个下箭头 选择从磁盘安装 然后找到自己刚刚下载好的,点击从磁盘安装 安装完成后勾选上插件 …

天翼云手机断开连接2小时关机

2025-04-21 天翼云手机断开连接2小时自动 天翼云手机 4元1个月 天翼云手机永不关机 天翼云手机不休眠 天翼云手机断开连接时,界面显示:离线运行,2小时后自动关机 电脑每小时自动连接一次 手机每小时自动连接一次

基于 FFmpeg 的音视频处理基础原理与实验探究

目录 1 基本知识1.1 解封装1.2 AAC和ADTS说明 1.3 H2641.3.1 H264编码结构解析1.3.2 NALU1.3.2 分类 2 实验1 探究音视频信息2.1 重要结构体介绍2.2 相关的API 3 实验二 提取AAC数据4 实验三 提取h264 1 基本知识 1.1 解封装 封装的逆向操作:封装是把音频流、视频流…

我用deepseek做了一个提取压缩文件夹下pdf和word文件工具

由于最近需要把大量的压缩文件的pdf和word文件统一复制到一个文件夹中。 我们一般正常操作方式的是把一个压缩文件一个一个解压,然后在把一个的解压好的文件夹下文件复制到另外一个文件夹中。 这个也需太繁琐了,从以往统计的需要花费两个小时间&#x…

机器人进阶---视觉算法(五)仿射变换和投影变换有什么区别

仿射变换和投影变换有什么区别 1. 定义2. 几何特性3. 变换矩阵4. 应用场景5. Python代码示例仿射变换投影变换6. 总结仿射变换和投影变换都是图像处理中常用的几何变换方法,但它们在变换性质、应用场景和变换矩阵等方面存在一些关键区别。 1. 定义 仿射变换 (Affine Transform…