这节里面提到了很多设计模式的问题,是比较好的学习材料 如果你来设计一个集群的控制器(Coordinator)你会如何设计呢? 需要考虑哪些问题?

  • coord 如何确定
  • coord 挂了之后如何重选举
  • coord 如何管理 Follower

控制器是什么

做什么用的?

在 Kafka 中起协调作用的组件
【待补充白话版解释】

主要功能

  • 主题管理(创建、删除、增加分区)
  • 分区重分配
  • Preferred 领导者选举
  • 集群成员管理(新增 Broker、Broker 主动关闭、Broker 宕机)
  • 数据服务
    • 控制器保存了最全的元数据信息,其他 Brocker 都要从这来拉取

控制器???

控制器是如何被选举出来的

Broker 在启动时,会尝试去 ZooKeeper 中创建 /controller 节点。Kafka 当前选举控制器的规则是:第一个成功创建 /controller 节点的 Broker 会被指定为控制器。

控制器保存了什么数据?

主要包括:

  • 所有主题信息。包括具体的分区信息,比如领导者副本是谁,ISR 集合中有哪些副本等。
  • 所有 Broker 信息。包括当前都有哪些运行中的 Broker,哪些正在关闭中的 Broker 等。
  • 所有涉及运维任务的分区。包括当前正在进行 Preferred 领导者选举以及分区重分配的分区列表。

控制器故障转移(Failover)

因为只有一个控制器,肯定会遇到挂了情况,Kafka 使用 Failover 的方式来处理

ZooKeeper 通过 Watch 机制感知到并删除了 /controller 临时节点。之后,所有存活的 Broker 开始竞选新的控制器身份。
image.png