Kafka为什么要抛弃ZooKeeper?

首先我们需要明白zookeeper在kafka中作用
1、提供元数据的管理(如一些 Broker 的信息、主题数据、分区数据等等。)
2、Broker注册、Consumer注册。
3、分区中leader副本的选举。
4、生产者和消费者的负载均衡。
5、维护消费组和消费者之间关系及每个partition的消费信息。
抛弃ZooKeeper理由

1:维护成本更高

Kafka作为中间件,强依赖于另一个中间件,搭建kafk集群,需要先搭建zookeeper集群。
增加运维难度。

2、CP,强一致性

如果 ZooKeeper 集群的某个节点的数据发生变更,则会通知其它 ZooKeeper 节点同时执行更新,就得等着大家(超过半数)都写完了才行,这写入的性能就比较差了。
一般而言,ZooKeeper 只适用于存储一些简单的配置或者是集群的元数据,不是真正意义上的存储系统。
如果写入的数据量过大,ZooKeeper 的性能和稳定性就会下降,可能导致 Watch 的延时或丢失。
还有,ZooKeeper 也是分布式的,也需要选举,它的选举也不快,而且发生选举的那段时候是不提供服务的!
真实实例:
0.8之前版本的kafka的offset的值,都由zookeeper管理,当topic数量过多时,提交位移或者获取位移的时候都需要访问 ZooKeeper ,这量一大 ZooKeeper 就顶不住。
所在在0.9之后的版本引入可位移主题(__consumer_offsets),将位移的提交和获取当做消息一样来处理,存储在日志中,避免了频繁访问 ZooKeeper 性能差的问题。
移除zookeeper的kafka是如何的。
1、元数据的保存(利用log存储机制来保存元数据)
2、利用KRaft来实现选举


版权声明:本文为weixin_42324471原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。