1. Broker

  • java
  • java
  • kafka

一、什么是broker

Kafka集群的节点叫做broker。

二、什么是controller

多个broker时,会选举产生一个controller,相当于kafka集群的主节点,用于管理和协调kafka集群。

三、controller的作用

3.1 Topic管理

创建、删除topic的操作都是经由controller处理的

3.2 Partition管理

增加partition并分配leader分区都是由controller处理的

3.3 集群成员管理

新增 Broker、Broker 主动关闭、Broker 故障等原因导致broker数量变动,都是由controller处理的

3.3.1 处理集群中下线的Broker

当某个Broker节点由于故障离开Kafka群集时,则存在于该Broker的leader分区将不可用(由于客户端仅对leader分区进行读写操作)。为了最大程度地减少停机时间,需要快速找到替代的leader分区。

利用Zookeeper监听broker变化:

  • Controller可以从Zookeeper监听(zookeeper watch)znode节点,一旦 znode 节点被创建、删除,子节点数量发生变化,或是 znode 所存的数据本身变更,ZooKeeper 会通过节点变更监听器 (ChangeHandler) 的方式通知kafka集群的Controller节点。
  • 每个Broker启动后,都会在会在zookeeper的 /Brokers/ids 下创建一个临时znode。当Broker宕机或主动关闭后,该 Broker 与 ZooKeeper的会话结束,这个znode会被自动删除。znode的变更就会被通知给Controller。

Controller接收到Zookeeper的通知后采取行动,决定哪些Broker上的分区成为leader分区,然后,它会通知每个相关的Broker,要么将Broker上的主题分区变成leader,要么通过LeaderAndIsr请求从新的leader分区中复制数据。

3.3.1 处理新加入到集群中的Broker

当一个新的 broker 刚加入集群时,不会自动地分担己有 topic 的负载,它只会对后续新增的 topic 生效。 如果要让新增 broker 为己有的 topic 服务,用户必须手动地调整现有的 topic 的分区分布,将一部分分区搬移到新增 broker 上。这就是所谓的分区重分配reassignment操作。

Loading...