Kafka 2.8.0新版发布,移除了对Zookeeper的依赖,通过KRaft进行自己的集群管理,一听到KRaft,我们就想到了Raft协议。Raft协议是当今最流行的分布式协调算法,Etcd、Consul等系统的基础,就来自于此。
1. 如何开始KRaft?
# ./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
二、实现原理
kafka增加了一个内部主题@metadata,用来存集群元数据信息。
使用vimdiff config/server.properties config/kraft/server.properties查看zookeeper方案和KRaft方案配置文件的差异可以看到:
process.roles=broker,controller
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
node.id=1
controller.quorum.voters=1@localhost:9093
process.roles有三个取值:
- broker: 这台机器将仅仅当作一个broker
- controller: 作为 Raft quorum的控制器之一进行启动
- broker,controller: 包含两者的功能
node.id用于进行投票。
三、去除zookeeper原因
- 依赖于zookeeper需要多维护一套zookeeper集群,部署和维护难度增加
- 监控更加便捷,避免zookeeper慢的问题。
- 最重要的当然是速度了。Raft比ZK的ZAB协议更加易懂,也更加高效,partition的主选举将变得更快捷,controller的调度速度将上一个档次。