这节里面提到了很多设计模式的问题,是比较好的学习材料 如果你来设计一个集群的控制器(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 开始竞选新的控制器身份。