1. Zookeeper

ZookeeperClusterEnsemble
  • 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

KRaftArchitecture
  • 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安全;

TwoMillionPartitionChart