kafka和zk的基本交互关系

1,kafaka集群的 broker,和 Consumer 都需要连接 Zookeeper。Producer 直接连接 Broker。

2,Producer 把数据上传到 Broker,Producer可以指定数据有几个分区、几个备份。上面的图中,数据有两个分区 0、1,每个分区都有自己的副本:0'、 1'。

3,leader 处理 partition 的所有读写请求,与此同时,follower会被动定期地去复制leader上的数据。

4,如果leader发生故障或挂掉,一个新leader被选举并接收客户端的消息。Kafka确保从同步副本列表中选举一个副本为 leader。
5,Topic 分区被放在不同的 Broker 中,保证 Producer 和 Consumer 错开访问 Broker,避免访问单个 Broker造成过度的IO压力,使得负载均衡。

kafka依赖于zookeeper

    kafka很多说不需要安装zk的是因为他们都使用了kafka自带的zk,至于kafka为什么使用zk,你首先要知道zk的作用,作为去中心化的集群模式。需要要消费者知道现在那些生产者(对于消费者而言,kafka就是生产者)是可用的。

    所以kafka需要zk,在kafka的设计中就依赖了zk了。需要一个地方存元信息。zookeeper又是分布式,做配置管理比较好的,于是就用上了。没zookeeper的话,也需要一套机制存储元数据和交换集群信息的工具。
    kafka的官方文档有说明。zookeeper是为了解决分布式一致性问题的工具。至于kafka为什么使用zk,你首先要知道zk的作用, 作为去中心化的集群模式。需要要消费者知道现在那些生产者(对于消费者而言,kafka就是生产者)是可用的。
    如果没了zk消费者如何知道,如果每次消费者在消费之前都去尝试连接生产者测试下是否连接成功,那么效率问题怎么解决。所以kafka需要zk,在kafka的设计中就依赖了zk了。

kafka中zk的作用

    zk相当于是kafka的一个基础设施,了解zk在kafka中的作用,可以对kafka的原理有进一步的了解,现在就开始学习这块的内容,首先从controller看起,这是zk中一个重要的组成:Controller 作为 Kafka Server端一个重要的组件,它的角色类似于其他分布式系统Master的角色,跟其他系统不一样的是,Kafka集群的任何一台Broker都可以作为Controller,但是在一个集群中同时只会有一个 Controlle是alive状态。在于分布式系统中,总会有一个地方需要对全局 meta 做一个统一的维护,Kafka 的 Controller 就是充当这个角色的。Controller 是运行在Broker上的,任何一台Broker都可以作为Controller,但是一个集群同时只能存在一个Controller,也就意味着Controller与数据节点是在一起的,Controller做的主要事情如下:

  • Broker 的上线、下线处理;
  • 新创建的 topic 或已有 topic 的分区扩容,处理分区副本的分配、leader选举;
  • 管理所有副本的状态机和分区的状态机,处理状态机的变化事件;
  • topic删除、副本迁移、leader切换等处理。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐