帅呆了!Kafka移除了Zookeeper!

帅呆了!Kafka移除了Zookeeper!

作者: 小姐姐养的狗 2021-04-28 18:28:44

开发

架构

Kafka 普天同庆!最新版的Kafka 2.8.0,移除了对Zookeeper的依赖,通过KRaft进行自己的集群管理。很好很好,终于有点质的改变了。

[[396651]]

本文转载自微信公众号「小姐姐味道」,作者小姐姐养的狗。转载本文请联系小姐姐味道公众号。  

普天同庆!最新版的Kafka 2.8.0,移除了对Zookeeper的依赖,通过KRaft进行自己的集群管理。很好很好,终于有点质的改变了。

一听到KRaft,我们就想到了Raft协议。Raft协议是当今最流行的分布式协调算法,Etcd、Consul等系统的基础,就来自于此。现在Kafka也有了。

由于这个功能太新了,所以2.8.0版本默认还是要用ZooKeeper的,但并不妨碍我们尝尝鲜。另外,不要太激动了,据官方声称有些功能还不是太完善,所以不要把它用在线上。

1. 如何开始KRaft?

Kafka使用内嵌的KRaft替代了ZooKeeper,是一个非常大的进步,因为像ES之类的分布式系统,这种集群meta信息的同步,都是自循环的。

但如何使用KRaft启动呢?很多同学直接晕菜了,这方面的资料也比较少,但使用起来非常简单。

我们注意到,在config目录下,多了一个叫做kraft的目录,里面包含着一套新的配置文件,可以直接摒弃对ZK的依赖。

通过下面三行命令,即可开启一个单机的broker,从始至终没有ZK的参与。

  1. # ./bin/kafka-storage.sh random-uuid 
  2. # ./bin/kafka-storage.sh format -t TBYU7WMiREexuZqrjKG60g -c ./config/kraft/server.properties 
  3. # ./bin/kafka-server-start.sh ./config/kraft/server.properties 

经过一阵噼里啪啦的运行,No ZK的Kafka已经启动起来了。

就是这么简单。

2. 如何配置的?

kafka又加了一个内部主题,叫做@metadata,用来存这些元信息。

接下来我们就要看一些关键的配置信息。你可以使用vimdiff config/server.properties config/kraft/server.properties看一下这些主要的区别。

首先,kraft多了一个叫做process.roles的配置。在我们的配置文件里它是这样的。

  1. process.roles=broker,controller 

它其实有三个取值。

  • broker: 这台机器将仅仅当作一个broker
  • controller: 作为 Raft quorum的控制器之一进行启动
  • broker,controller: 包含两者的功能

熟悉ES的同学可以看出,这些划分就像是es的master和node,所以分布式的概念其实在一定程度上是相通的。

接下来是监听地址的变化,因为我们的server有了两个功能,所以也就需要开启两个端口。

  1. listeners=PLAINTEXT://:9092,CONTROLLER://:9093 

另外,还有一个叫做node.id的东西。不同于原来的broker.id,这个nodeid是用来投票用的。

  1. node.id=1 

因为raft协议的特性,我们的投票配置就要使用上面的node.id。写起来比较怪异是不是?但总比Zk的好看多了。所以这些配置在后面的版本是有可能改动的。

  1. controller.quorum.voters=1@localhost:9093 

这就是配置文件的主要区别。我们来看看它的集合。

  1. process.roles=broker,controller  
  2. listeners=PLAINTEXT://:9092,CONTROLLER://:9093 
  3. node.id=1    
  4. controller.quorum.voters=1@localhost:9093 

3. 为什么要干掉ZK?

Kafka作为一个消息队列,竟然要依赖一个重量级的协调系统ZooKeeper,不得不说是一个笑话。同样作为消息队列,人家RabbitMQ早早的就实现了自我管理。

Zookeeper非常笨重,还要求奇数个节点的集群配置,扩容和缩容也不方便。Zk的配置方式,也和kafka的完全不一样,要按照调优Kafka,竟然还要兼顾另外一个系统,这真是日了狗了。

Kafka要想往轻量级,开箱即用的方向发展,就不得不干掉Zk。

另外,由于Zk和Kafka毕竟不是在一个存储体系里面,当Topic和Partition的数量上了规模,数据同步问题就变的显著起来。Zk是可靠,但是它慢啊,完全不如放在Kafka的日志存储体系里面,这对标榜速度的Kafka来说,是不得不绕过的一环。

使用过Kafka-admin的同学,应该都对缓慢的监控数据同步历历在目。它需要先从zk上转一圈,获取一些元数据信息,然后再从Kafka的JMX接口中拉取数据。这么一转悠,就几乎让大型集群死翘翘。

4. 会有哪些改变?

部署更简单。

首先,部署变的更加简单。对于一些不太追求高可用的系统,甚至一个进程就能把可爱的kafka跑起来。我们也不需要再申请对zookeeper友好的SSD磁盘,也不用再关注zk的容量是不是够用了。

监控更便捷。

其次,由于信息的集中,从Kafka获取监控信息,就变得轻而易举,不用再到zk里转一圈了。与grafana/kibana/promethus等系统的集成,指日可待。

速度更快捷。

最重要的当然是速度了。Raft比ZK的ZAB协议更加易懂,也更加高效,partition的主选举将变得更快捷,controller的调度速度将上一个档次。

以后,再也不会有这样的连接方式。

  1. zookeeper.connect=zookeeper:2181 

取而代之的,只会剩下bootstrap的连接方式。Kafka的节点,越来越像对等节点。

  1. bootstrap.servers=broker:9092 

kafka还提供了一个叫做kafka-metadata-shell.sh的工具,能够看到topic和partion的分布,这些信息原来是可以通过zk获取的,现在可以使用这个命令行获取。

  1. $ ./bin/kafka-metadata-shell.sh  --snapshot /tmp/kraft-combined-logs/\@metadata-0/00000000000000000000.log 
  2. >> ls / 
  3. brokers  local  metadataQuorum  topicIds  topics 
  4. >> ls /topics 
  5. foo 
  6. >> cat /topics/foo/0/data 
  7.   "partitionId" : 0, 
  8.   "topicId" : "5zoAlv-xEh9xRANKXt1Lbg"
  9.   "replicas" : [ 1 ], 
  10.   "isr" : [ 1 ], 
  11.   "removingReplicas" : null
  12.   "addingReplicas" : null
  13.   "leader" : 1, 
  14.   "leaderEpoch" : 0, 
  15.   "partitionEpoch" : 0 
  16. >> exit 

最后,还是要提醒一下,目前不要在线上环境开启这个功能,还是老老实实用ZK吧。功能就是原因,因为这些功能的配套设施还没有到位,代码也没有达到让人放心的程度。你要是用了,很可能会因为工具不全或者难缠的bug痛不欲生。

不过,这勇敢的第一步已经卖出,方向也已经指明,我们剩下的就是等待了。无论如何,干掉Zk,是件大好事。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/251590.html<

(0)
管理的头像管理
上一篇2025-04-29 01:21
下一篇 2025-04-29 01:22

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注