💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
<ins>Kafka 容灾指当 Broker 宕机时的恢复机制</ins>。<mark>在 Kafka 集群中会有一个或者多个 Broker,其中有一个 Broker 会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。</mark> <br/> ➢ 当某个分区的 Leader 副本出现故障时,由控制器负责为该分区选举新的Leader 副本。 ➢ 当检测到某个分区的 ISR 集合发生变化时,由控制器负责通知所有Broker 更新其元数据信息。 ➢ 当使用 kafka-topics.sh 脚本为某个 topic 增加分区数量时,同样还是由控制器负责分区的重新分配。 <br/> Kafka中的控制器选举的工作依赖于ZooKeeper,成功竞选为控制器的Broker会在 ZooKeeper 中创建/controller 这个临时(EPHEMERAL)节点,此临时节点的内容参考如下: ``` {"version":1,"brokerid":0,"timestamp":"1561214469054"} ``` brokerid 表示称为控制器的 Broker 的 id 编号,timestamp 表示竞选称为控制器时的时间戳。 <br/> Broker 容灾流程如下: 1. Controller 在 ZooKeeper 的 `/brokers/ids/[brokerId]` 节点注册 Watcher,当Broker 宕机时 ZooKeeper 会监听到。 2. Controller 从/brokers/ids 节点读取可用 Broker。 3. Controller 决定 set_p,该集合包含宕机 Broker 上的所有 Partition。 4. 对 set_p 中的每一个 Partition: (1)从`/brokers/topics/[topic]/partitions/[partition]/state` 节点读取 ISR; (2)决定新 Leader; (3)将新 Leader、ISR、controller_epoch 和 leader_epoch 等信息写入 state节点。 5. 通过 RPC 向相关 Broker 发送 leaderAndISRRequest 命令。