
Kafka2.8.0版本于昨日(2021年4月19日)发布,该版本提供了KIP-500的早期访问版本,它允许您在没有apachezookeeper的情况下运行Kafka集群,而取代zookeeper的是Kafka内部实现的KRaft协议。这种新体系结构使每个集群支持更多分区、更简单的操作和更严格的安全性。需要特别强调的一点是;当前版本还不完善,不能用于生产环境。
KIP-500最早出现于2019年10月30号,JIRA记录见
https://issues.apache.org/jira/browse/KAFKA-9119

详细描述见
https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum

简单概括来讲,KIP-500主要是将原来存储在Zookeeper的元数据信息和配置信息从ZooKeeper迁移出来到一个名称为@metadata的新的内部主题中(类似于已有的用于存储消费者offset的__consumer_offsets主题)。@metadata主题由“controllers”的内部仲裁管理,并复制到群集中的所有brokers节点。现在的集群中,Raft quorum的leader扮演着与controller相同的角色。KIP-500中的节点可以充当controller、broker或两者兼有,具体取决于新的配置项process.roles。有关快速启动说明和其他详细信息,请参阅README文件。
https://github.com/apache/kafka/blob/2.8/config/kraft/README.md
第一步:生成cluster ID
$ ./bin/kafka-storage.sh random-uuidxtzWWN4bTjitpL3kfd9s5g
第二步:格式化存目录
$ ./bin/kafka-storage.sh format -t <uuid> -c ./config/kraft/server.propertiesFormatting tmp/kraft-combined-logs
第三步:启动Kafka Server
$ ./bin/kafka-server-start.sh ./config/kraft/server.properties[2021-02-26 15:37:11,071] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)[2021-02-26 15:37:11,294] INFO Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation (org.apache.zookeeper.common.X509Util)[2021-02-26 15:37:11,466] INFO [Log partition=@metadata-0, dir=/tmp/kraft-combined-logs] Loading producer state till offset 0 with message format version 2 (kafka.log.Log)[2021-02-26 15:37:11,509] INFO [raft-expiration-reaper]: Starting (kafka.raft.TimingWheelExpirationService$ExpiredOperationReaper)[2021-02-26 15:37:11,640] INFO [RaftManager nodeId=1] Completed transition to Unattached(epoch=0, voters=[1], electionTimeoutMs=9037) (org.apache.kafka.raft.QuorumState)...
如同基于zookeeper的Kafka Broker一样,你可以连接到9092端口,进行管理、生产、消费等相关操作。
$ ./bin/kafka-topics.sh --create --topic foo --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092Created topic foo.




