隨筆 kafka控制器 Broker 和 Leader 的产生1

1. 控制器 Broker 的选举过程

控制器的选举过程涉及到所有 Broker 和 ZooKeeper,主要分为以下几个步骤:

1.1 Broker 启动
  • 当一个 Broker 启动时,它会向 ZooKeeper 注册自己。每个 Broker 会在 ZooKeeper 的 /brokers/ids 路径下创建一个临时节点,表示它的存在。
1.2 创建控制器节点
  • 启动的 Broker 会尝试创建一个控制器节点,通常在 ZooKeeper 的 /controller 路径下创建一个临时节点。
  • 这个节点的创建是具有原子性的,即 ZooKeeper 会确保同一时刻只有一个 Broker 能够成功创建该节点。
1.3 竞争控制器
  • 所有启动的 Broker 会尝试创建 /controller 的临时节点。第一个成功创建该节点的 Broker 将被选为控制器。
  • 这个过程确保在集群中只有一个控制器存在,因为 ZooKeeper 会自动删除临时节点,当控制器 Broker 失去连接或崩溃时,其他 Broker 可以重新进行控制器选举。
1.4 控制器的初始化
  • 成功创建 /controller 节点的 Broker 会读取和初始化控制器的状态,并开始负责管理集群元数据和 Broker 状态。

2. Leader 的选举过程

Leader 的选举过程则更为复杂,通常在主题分区创建后进行,以下是具体的步骤:

2.1 分区创建
  • 当创建主题时,可以指定分区的数量。每个分区会有一组副本(包括 Leader 和 Follower)。
2.2 控制器进行 Leader 选举
  • 控制器会为每个分区选择 Leader。选择的过程通常基于当前 Broker 的状态和负载。
  • 控制器会从 ZooKeeper 中获取所有 Broker 的信息,判断哪些 Broker 可用。
2.3 选举机制
  • 控制器会按照以下步骤进行 Leader 选举:
    1. 获取可用 Broker 列表:控制器从 ZooKeeper 中获取当前活跃的 Broker 列表。
    2. 选择候选者:从可用的 Broker 中选择一个作为 Leader,通常选择负载较轻、状态正常的 Broker。
    3. 更新 ZooKeeper:控制器在 ZooKeeper 中更新该分区的元数据,设置 Leader 信息,例如 /brokers/topics/{topic_name}/{partition_id}/leader 路径下存储 Leader 的 Broker ID。
    4. 通知 Follower:控制器会通知相应的 Follower 开始从 Leader 同步数据。
2.4 Leader 变更
  • 如果当前的 Leader Broker 因故障下线,控制器会在 ZooKeeper 中检测到 Leader 的缺失。
  • 控制器会重新进行 Leader 选举,重复以上选举步骤,选择新的 Broker 作为 Leader。

3. 选举的关键特性

  • 原子性:ZooKeeper 的节点创建操作是原子的,这保证了控制器选举的唯一性。
  • 临时节点:控制器和 Leader 都使用临时节点,确保在 Broker 失去连接后,节点会被删除,从而触发新的选举。
  • 一致性:通过 ZooKeeper,所有 Broker 都可以一致地获取当前的控制器和 Leader 状态。
定义集群中负责管理状态的特殊 Broker每个主题分区的主节点,处理读写请求
选举机制由 ZooKeeper 选举生成,确保只有一个控制器由控制器管理,针对每个分区选举
职责管理 Broker 的状态,处理元数据和分区处理对应分区的所有读写请求
数量只有一个控制器 Broker每个分区有一个 Leader,可以有多个
角色负责协调和管理集群负责数据的读写和同步

总结

  • 控制器的选举过程是通过 Broker 注册和创建临时节点来实现的,确保集群中只有一个控制器。
  • Leader 的选举则由控制器管理,基于当前 Broker 的状态进行选择,确保分区的 Leader 始终可用。整个选举过程确保了 Kafka 集群的高可用性和一致性。
  • 控制器 Broker 是 Kafka 集群中的管理者,负责管理集群状态和元数据,而Leader 则是每个主题分区的主节点,负责处理该分区的请求。
  • 控制器通过选举机制选出,而 Leader 的选举则是由控制器负责的。整个过程首先是 Broker 启动并注册到 ZooKeeper,然后通过 ZooKeeper 进行控制器的选举;在此之后,控制器为每个主题分区选举 Leader。一个集群只能有一个控制器,但每个分区都有一个 Leader,可以有多个分区的 Leader。
  • Kafka集群中多个broker,有一个会被选举为controller leader,负责管理整个集群中分区和副本的状态,比如partition的leader 副本故障,由controller 负责为该partition重新选举新的leader 副本;当检测到ISR列表发生变化,有controller通知集群中所有broker更新其MetadataCache信息;或者增加某个topic分区的时候也会由controller管理分区的重新分配工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值