1. Zookeeper
-
Zookeeper管理broker元数据,跟踪集群状态,
成员,存储主题,权限,配置,和领导leadership; -
Zookeeper向Kafka发送通知(notification),
以应对发生变化(in case of change),如:new topic,
broker die,broker come up,delete topic等; -
Zookeeper有个领导者leader(write),其余服务器是follower(read);
-
Zookeeper不存储消费者偏移量(consumer offset);
-
Zookeeper设计为与奇数(odd)数量的服务器(如1,3,5,7……)一起运行;
-
另勿使用Zookeeper作为Kafka客户端或连接到Kafka的其它程序的配置中心;
2. Kafka KRaft
-
Kafka的缩放在Zookeeper遇到性能瓶颈,删除Zookeeper,
可扩展到数百万个分区(scale to millions of partition); -
Kafka集群只支持有限数量的分区,最多20w个;
集群超10w分区时,Zookeeper面临扩展性(scaling issue)问题; -
当Kafka Broker加入或离开集群时,必须进行大量的领导人选举,
leader election,可能使Zookeeper过载并暂时减慢集群速度; -
Kafka集群的设置很困难,且依赖于另一个组件来设置,从kafka启动的单一进程;
-
更易maintain和setup,提高稳定性stability,更易监控,管理等;
-
Kafka集群元数据有时与Zookeeper不同步,更快的控制器关闭和恢复时间;
-
整个系统的单一安全模型,Zookeeper安全落后于(lagging behind)Kafka安全;