Kafka 2.8.0 出炉了,此版本有一项重大改良:
实现了 Raft 分布式一致性机制,意味着能够脱离 ZooKeeper 独立运行了。
ZooKeeper 在 Kafka 中扮演着重要的角色,用来存储 Kafka 的元数据。
ZooKeeper 存储着 Partition 和 Broker 的元数据,同时也负责 Kafka Controller 的选举工作。
对于 Kafka 来讲,ZooKeeper 是一套内部零碎,要想部署一套 Kafka 集群,就要同时部署、治理、监控 ZooKeeper。
ZooKeeper 有本人的配置形式、管理工具,和 Kafka 齐全不一样,所以,一起搞两套分布式系统,天然就晋升了 复杂度,也更容易呈现问题。有时工作量还会加倍,例如要开启一些平安个性,Kafka 和 ZooKeeper 中都须要配置。
除了复杂度,内部存储也会升高零碎 效率。
例如 Kafka 集群每次启动的时候,Controller 必须从 ZooKeeper 加载集群的状态信息。
再比方选举出一个新的 Controller 之后也会比拟麻烦,因为须要加载元数据,而此时元数据的量可能曾经十分大了,这就产生了效率问题。
所以,ZooKeeper 带来的复杂度、零碎效率这两个问题曾经成为 Kafka 的痛点,Kafka 团队始终在致力去除对 ZooKeeper 的依赖。Kafka 2.8.0 这个版本终于实现了。
应用 Raft 模式之后,元数据、配置信息都会保留在 @metadata
这个 Topic 中,主动在集群中复制。这样 Kafka 就会简略笨重很多。
但须要 留神 的是,Zookeeper-less Kafka 还属于晚期版本,并不欠缺,所以,当初 不要 利用在线上产品环境中。