ZooKeeper 用的好好地,Kafka 为什么要抛弃 ZooKeeper?

news2025/2/27 1:53:42

ZooKeeper 的作用

ZooKeeper 是一个开源的分布式协调服务框架,你也可以认为它是一个可以保证一致性的分布式(小量)存储系统。特别适合存储一些公共的配置信息、集群的一些元数据等等。

它有持久节点和临时节点,而临时节点这个玩意再配合 Watcher 机制就很有用。

当创建临时节点的客户端与 ZooKeeper 断连之后,这个临时节点就会消失,并且订阅了节点状态变更的客户端会收到这个节点状态变更的通知。

图片

所以集群中某一服务上线或者下线,都可以被检测到。因此可以用来实现服务发现,也可以实现故障转移的监听机制。

Kafka 就是强依赖于 ZooKeeper,没有 ZooKeeper 的话 Kafka 都无法运行。

ZooKeeper 为 Kafka 提供了元数据的管理,例如一些 Broker 的信息、主题数据、分区数据等等。

在每个 Broker 启动的时候,都会和 ZooKeeper 进行交互,这样 ZooKeeper 就存储了集群中所有的主题、配置、副本等信息。

图片

还有一些选举、扩容等机制也都依赖 ZooKeeper 。

例如控制器的选举:每个 Broker 启动都会尝试在 ZooKeeper 注册/controller临时节点来竞选控制器,第一个创建/controller节点的 Broker 会被指定为控制器。

竞争失败的节点也会依赖 watcher 机制,监听这个节点,如果控制器宕机了,那么其它 Broker 会继续来争抢,实现控制器的 failover。

从上面就可以得知 ZooKeeper 对 Kafka 来说,很重要。

那为什么要抛弃 ZooKeeper

软件架构都是演进的,之所以要变更那肯定是因为出现了瓶颈。

先来看看运维的层面的问题。

首先身为一个中间件,需要依赖另一个中间件,这就感觉有点奇怪。

你要说依赖 Netty 这种,那肯定是没问题的。

但是 Kafka 的运行需要提供 ZooKeeper 集群,这其实有点怪怪的。

就等于如果你公司要上 Kafka 就得跟着上 ZooKeeper ,被动了增加了运维的复杂度。

好比你去商场买衣服,要买个上衣,服务员说不单卖,要买就得买一套,这钱是不是多花了?

所以运维人员不仅得照顾 Kafka 集群,还得照顾 ZooKeeper 集群。

再看性能层面的问题。

ZooKeeper 有个特点,强一致性。

如果 ZooKeeper 集群的某个节点的数据发生变更,则会通知其它 ZooKeeper 节点同时执行更新,就得等着大家(超过半数)都写完了才行,这写入的性能就比较差了。

图片

然后看到上面我说的小量存储系统了吧,一般而言,ZooKeeper 只适用于存储一些简单的配置或者是集群的元数据,不是真正意义上的存储系统。

如果写入的数据量过大,ZooKeeper 的性能和稳定性就会下降,可能导致 Watch 的延时或丢失。

所以在 Kafka 集群比较大,分区数很多的时候,ZooKeeper 存储的元数据就会很多,性能就差了。

还有,ZooKeeper 也是分布式的,也需要选举,它的选举也不快,而且发生选举的那段时候是不提供服务的!

基于 ZooKeeper 的性能问题 Kafka 之前就做了一些升级。

例如以前 Consumer 的位移数据是保存在 ZooKeeper 上的,所以当提交位移或者获取位移的时候都需要访问 ZooKeeper ,这量一大 ZooKeeper 就顶不住。

所以后面引入了位移主题(Topic是__consumer_offsets),将位移的提交和获取当做消息一样来处理,存储在日志中,避免了频繁访问 ZooKeeper 性能差的问题。

还有像一些大公司,可能要支持百万分区级别,这目前的 Kafka 单集群架构下是无法支持稳定运行的,也就是目前单集群可以承载的分区数有限。

所以 Kafka 需要去 ZooKeeper 。

所以没了 Zookeeper 之后的Kafka 的怎样的?

没了 Zookeeper 的 Kafka 就把元数据存储到自己内部了,利用之前的 Log 存储机制来保存元数据。

就和上面说到的位移主题一样,会有一个元数据主题,元数据会像普通消息一样保存在 Log 中。

所以元数据和之前的位移一样,利用现有的消息存储机制稍加改造来实现了功能,完美!

然后还搞了个 KRaft 来实现 Controller Quorum。

图片图来自 confluent

这个协议是基于 Raft 的,协议具体就不展开了,就理解为它能解决 Controller Leader 的选举,并且让所有节点达成共识。

在之前基于 Zookeeper 实现的单个 Controller 在分区数太大的时候还有个问题,故障转移太慢了。

当 Controller 变更的时候,需要重新加载所有的元数据到新的 Controller 身上,并且需要把这些元数据同步给集群内的所有 Broker。

而 Controller Quorum 中的 Leader 选举切换则很快,因为元数据都已经在 quorum 中同步了,也就是 quorum 的 Broker 都已经有全部了元数据,所以不需要重新加载元数据!

并且其它 Broker 已经基于 Log 存储了一些元数据,所以只需要增量更新即可,不需要全量了。

这波改造下来就解决了之前元数据过多的问题,可以支持更多的分区!

最后

可能看到这里有人会说,那为何一开始不这么实现?

因为 ZooKeeper 是一个功能强大且经过验证的工具,在早期利用它来实现一些功能,多简单哟,都不需要自己实现。

要不是 ZooKeeper 的机制导致了这个瓶颈,也不可能会有这个改造的。

软件就是这样,没必要重复造轮子,合适就好。

参考资料:

  • https://www.confluent.io/blog/kafka-without-zookeeper-a-sneakpeek/
  • https://time.geekbang.org/column/article/253202
  • https://www.infoq.cn/article/PHF3gFjUTDhWmctg6kXe

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

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

相关文章

升级到PyTorch 2.0的技巧总结

PyTorch 2.0 发布也有一段时间了,大家是不是已经开始用了呢? PyTorch 2.0 通过引入 torch.compile,可以显着提高训练和推理速度。 与 eagerly 模式相反,编译 API 将模型转换为中间计算图(FX graph)&#xf…

App外包开发上线Google Play流程

完成App开发后需要在各大应用市场上线,国内的应用市场比较多,各自的规则也不相同,上线审核也比较复杂;国外上线主要是Google Play市场,它更重视隐私的保护,必须严格按照规范来保护个人隐私,因此…

chatgpt赋能Python-python_gantt

Python Gantt:更高效的项目管理工具 在当今快节奏的环境下,项目管理的重要性愈发凸显。Gantt图作为一种常见的项目计划图表工具,已经得到了广泛的应用。Python作为一种高效的编程语言,自然而然地成为了Gantt图的一种实现方式。 …

chatgpt赋能Python-python_header怎么写

Python是一种高级编程语言,已经被广泛地应用于人工智能、数据分析、网站开发等多个领域。在使用Python编写代码时,我们经常需要在编写代码之前添加一些注释,来对代码进行说明或者提醒。在Python中,我们可以通过编写Header&#xf…

泰克Tektronix MDO4054C混合域示波器

附加功能: 带宽:500 兆赫 带宽可升级至 1 GHz频道:4采样率:2.5 GS/s 所有通道上的 20 M 记录长度> 340,000 wfm/s 最大波形捕获率数字电压表/频率计数器(产品注册免费)性能 6 合 1 集成示波器&#xff…

chatgpt赋能Python-python_head

Python.head——一款优秀的SEO工具 在当今数字化时代,SEO(搜索引擎优化)对于企业的网络营销来说是非常关键的。而Python.head就是一款非常优秀的SEO工具,它可以让你更好地优化你的网站,提升搜索引擎排名。 什么是Pyt…

burpsuite导入网站的客户端证书

0x01 背景 个别网站需要导入客户端的XX.P12证书,如果没有导入直接访问网站,浏览器会提示:400 Bad Request , 出现:No required SSL certificate was sent等提示,如下图 此时需要在burpsuite中导入证书 0x02 网站客户…

增收不增利?Mobileye困局

作为全球头部ADAS芯片供应商,Mobileye的财务数据变化也在一定程度上反映市场的走向。 本周,该公司发布今年一季度财报,数据显示,季度营收同比增长16%,至4.58亿美元。其中,产品平均交付价格从去年同期的51.0…

chatgpt赋能Python-python_gephi

Python Gephi:探索新时代的可视化数据分析 随着数据量不断增加,我们需要更多的工具来帮助我们更好地理解和分析这些数据。其中,可视化数据分析是一种效果非常明显的方法。通过数据可视化,我们可以更直观、更生动地显示和分析数据…

申请域名型(DV)SSL证书流程

详细步骤如下: 1、选购SSL证书 选择TrustAsia品牌,域名型DV,结算开通。(购买SSL证书实际价格请以购买页面显示为准。) 2.管理中心提交证书审核资料 (资料补全) 请填写真实有效审核资料 接下来参…

《人工智能与数据科学竞赛白皮书 2022 》重磅发布

日前,由DataCastle数据城堡联合福建省数据治理与数据流通工程研究院、电子科技大学大数据研究中心、山东省数据要素创新创业共同体、深圳国家基因库、亚马逊云科技、移动云编写的《人工智能与数据科学竞赛白皮书2022》于5月19日正式发布。 《白皮书2022》基于2020-…

陪诊小程序源码|陪诊小程序搭建|陪诊小程序制作

随着人们对健康关注程度的提升,陪诊服务也逐渐成为了医疗服务中不可或缺的一部分。为了满足人们在陪诊方面的需求,陪诊小程序应运而生。下面,我们将为大家介绍陪诊小程序开发的功能优势。 功能优势一键预约陪诊服务节省时间,方便…

阿里云ECS上安装宝塔

yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh 28615082 安装完之后会跳出端口号,用户名,密码,复制面板地址打开就可以,记得在安全组中配置一下需…

计算机毕业论文选题推荐|软件工程|系列八

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)应用负载仿真计…

DNDC模型一:温室气体时空动态模拟

查看原文>>>生态系统模型:DNDC、CMIP6、GEE林业、无人机遥感、InVEST、Noah-MP、ArcGIS Pro、APSIM模型等 目录 一、DNDC模型讲解 二、DNDC初步操作 三、DNDC气象数据制备 四、DNDC土地数据制备 五、DNDC土壤数据制备 六、 DNDC区域数据制备 七、土…

Sonic新生态Sonic IDE体验

背景 Sonic:免费开源的云真机测试平台,用心打造更好的使用体验。 之前在做APP的日常测试和UI自动化的时候,一直在使用Sonic 没有切换到平台上进行自动化测试的原因是由于现有脚本框架已经成熟,并且有很多自定义的拓展,所以Sonic的更多是一个设备管理员的角色 在Soni…

提高仓储效率,打造智能化管理,WMS系统如何助力企业升级

作为制造型企业,仓库往往是一个复杂的物流节点。在仓库中,物资的种类繁多,而且具有一定的流动性,这就要求仓库管理人员对仓库物资的数量、状态、质量和存放位置有一定的了解。然而,对于很多企业而言,仓库管…

Guitar Pro8吉他软件主要功能详解及安装教程

Guitar Pro是一款专业的吉他软件,它支持所有的4至8弦的弹拔乐器(吉他,贝司,班卓琴,曼陀铃等等,所以不论是初学者还是高手,都希望利用他来创作音乐,或者是用来充当一个虚拟的乐队。 …

Blob格式转json格式,拿到后端返回的json数据

Blob格式转json格式,拿到后端返回的json数据 在进行文件下载的时候,我们通过blob,进行下载文件,需要axios设置responseType responseType: blob,axios({...xxx,responseType: blob,}).then(res > {if (!res || !res.headers[…

论文撰写总结与撰写心得——如何更好的产出几万字的论文

一张图开场,说说为什么会有本篇文章,因为晚上关了灯的屏幕太晃眼睛了,之前好几次不是哥哥我不加班帮小伙伴们搞论文,是当时眼睛顶不住了,所以这篇文章除了说一下论文的码字心得外,哥哥我再说一下如何在夜间…