Broker 本身无状态。
- Broker 在宕机时,不会主动通知其他 broker,分布在这个 broker上的所有 bundle(bundle 是 topic 集合,是 Pulsar topic 进行负载均衡的最小单位)都会执行 unload 操作,unload操作的流程:
a. 关闭 unload 中所有 topic 的生产者、消费者和复制机;
b. 关闭 Managedledger。当所有 bundle 都 unload 完成后,这个 broker 就可以正常退出。 - 如果是 broker 异常退出,这个 broker 上的所有 bundle 也会被强行去掉对应归属,即这个 bundle 不在归属于这个 broker。
当生产者或消费者客户端需要继续向某个 topic 发送/接收消息时,会首先执行 lookup 请求,会按照 loadbalance 策略找到目标broker 节点(当前是 load 最低的节点),将对应 bundle onLoad 到目标 broker。待 onLoad 完成后,这个 broker 就可以继续为该 topic 提供读写服务了。
另外,broker 在 ZooKeeper 上的一些临时节点信息,会主动删除;或因为超时而断开、其他 broker 监听后,会进行相应的操作。