本篇内容介绍了“如何配置KRaft”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Kafka使用内嵌的KRaft替代了ZooKeeper,是一个非常大的进步,因为像ES之类的分布式系统,这种集群meta信息的同步,都是自循环的。
但如何使用KRaft启动呢?很多同学直接晕菜了,这方面的资料也比较少,但使用起来非常简单。
我们注意到,在config目录下,多了一个叫做kraft的目录,里面包含着一套新的配置文件,可以直接摒弃对ZK的依赖。
通过下面三行命令,即可开启一个单机的broker,从始至终没有ZK的参与。
# ./bin/kafka-storage.sh random-uuid # ./bin/kafka-storage.sh format -t TBYU7WMiREexuZqrjKG60g -c ./config/kraft/server.properties # ./bin/kafka-server-start.sh ./config/kraft/server.properties
经过一阵噼里啪啦的运行,No ZK的Kafka已经启动起来了。
就是这么简单。
kafka又加了一个内部主题,叫做@metadata,用来存这些元信息。
接下来我们就要看一些关键的配置信息。你可以使用vimdiff config/server.properties config/kraft/server.properties看一下这些主要的区别。
首先,kraft多了一个叫做process.roles的配置。在我们的配置文件里它是这样的。
process.roles=broker,controller
它其实有三个取值。
broker: 这台机器将仅仅当作一个broker
controller: 作为 Raft quorum的控制器之一进行启动
broker,controller: 包含两者的功能
熟悉ES的同学可以看出,这些划分就像是es的master和node,所以分布式的概念其实在一定程度上是相通的。
接下来是监听地址的变化,因为我们的server有了两个功能,所以也就需要开启两个端口。
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
另外,还有一个叫做node.id的东西。不同于原来的broker.id,这个nodeid是用来投票用的。
node.id=1
因为raft协议的特性,我们的投票配置就要使用上面的node.id。写起来比较怪异是不是?但总比Zk的好看多了。所以这些配置在后面的版本是有可能改动的。
controller.quorum.voters=1@localhost:9093
这就是配置文件的主要区别。我们来看看它的集合。
process.roles=broker,controller listeners=PLAINTEXT://:9092,CONTROLLER://:9093 node.id=1 controller.quorum.voters=1@localhost:9093
Kafka作为一个消息队列,竟然要依赖一个重量级的协调系统ZooKeeper,不得不说是一个笑话。同样作为消息队列,人家RabbitMQ早早的就实现了自我管理。
Zookeeper非常笨重,还要求奇数个节点的集群配置,扩容和缩容也不方便。Zk的配置方式,也和kafka的完全不一样,要按照调优Kafka,竟然还要兼顾另外一个系统,这真是日了狗了。
Kafka要想往轻量级,开箱即用的方向发展,就不得不干掉Zk。
另外,由于Zk和Kafka毕竟不是在一个存储体系里面,当Topic和Partition的数量上了规模,数据同步问题就变的显著起来。Zk是可靠,但是它慢啊,完全不如放在Kafka的日志存储体系里面,这对标榜速度的Kafka来说,是不得不绕过的一环。
使用过Kafka-admin的同学,应该都对缓慢的监控数据同步历历在目。它需要先从zk上转一圈,获取一些元数据信息,然后再从Kafka的JMX接口中拉取数据。这么一转悠,就几乎让大型集群死翘翘。
部署更简单。
首先,部署变的更加简单。对于一些不太追求高可用的系统,甚至一个进程就能把可爱的kafka跑起来。我们也不需要再申请对zookeeper友好的SSD磁盘,也不用再关注zk的容量是不是够用了。
监控更便捷。
其次,由于信息的集中,从Kafka获取监控信息,就变得轻而易举,不用再到zk里转一圈了。与grafana/kibana/promethus等系统的集成,指日可待。
速度更快捷。
最重要的当然是速度了。Raft比ZK的ZAB协议更加易懂,也更加高效,partition的主选举将变得更快捷,controller的调度速度将上一个档次。
以后,再也不会有这样的连接方式。
zookeeper.connect=zookeeper:2181
取而代之的,只会剩下bootstrap的连接方式。Kafka的节点,越来越像对等节点。
bootstrap.servers=broker:9092
kafka还提供了一个叫做kafka-metadata-shell.sh的工具,能够看到topic和partion的分布,这些信息原来是可以通过zk获取的,现在可以使用这个命令行获取。
$ ./bin/kafka-metadata-shell.sh --snapshot /tmp/kraft-combined-logs/\@metadata-0/00000000000000000000.log >> ls / brokers local metadataQuorum topicIds topics >> ls /topics foo >> cat /topics/foo/0/data { "partitionId" : 0, "topicId" : "5zoAlv-xEh9xRANKXt1Lbg", "replicas" : [ 1 ], "isr" : [ 1 ], "removingReplicas" : null, "addingReplicas" : null, "leader" : 1, "leaderEpoch" : 0, "partitionEpoch" : 0 } >> exit
“如何配置KRaft”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。