Kafka 中集群的成员关系

Kafka 中集群的成员关系

集群的成员关系

Kafka 使用 zookeeper 来维护集群成员的信息。每个 broker 都有个唯一标识符,这个标识符可以在配置文件里指定,也可以自动生成。在 broker 启动的时候,它通过创建临时节点把自己的 ID 注册到 zookeeper 。Kafka 组件订阅 zookeeper 的 /brokers/ids 路径(broker在zookeeper上的注册路径),当有broker加入集群或退出集群时,这些组件就可以获得通知。
在这里插入图片描述

在 broker 停机、出现网络分区或长时间垃圾回收停顿时,broker 会从 zookeeper 上断开连接,此时 broker 在启动时创建的临时节点会自动从 Zookeeper 上移除。监听 broker 列表的 Kafka 组件会被告知该 broker 已移除。

在关闭 broker 时,它对应的节点也会消失,不过它的 lD 会继续存在于其他数据结构中。例如,主题的副本列表里就可能包含这些 ID。

在完全关闭一个 broker 之后,如果使用相同的ID启动另一个全新的broker,它会立刻加入集群,并拥有与旧 broker 相同的分区和主题。

控制器

控制器其实就是一个 broker,只不过它除了具有一般 broker 的功能之外,还负责分区首领的选举。集群里第一个启动的 broker 通过在Zookeeper里创建一个临时节点 /controller 让自己成为控制器。
在这里插入图片描述
其他broker在启动时也会尝试创建这个节点,不过它们会收到一个“节点已存在”的异常,然后“意识”到控制器节点已存在,也就是说集群里已经有一个控制器了。

其他 broker 在控制器节点上创建 Zookeeperwatch对象,这样它们就可以收到这个节点的变更通知。这种方式可以确保集群里一次只有一个控制器存在。

Kafka 使用 zookeeper 的临时节点来选举控制器,并在节点加入集群或退出集群时通知控制器。控制器负责在节点加入或离开集群时进行分区首领选举。

参考:King——笔记-Kafka

发布了130 篇原创文章 · 获赞 233 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44367006/article/details/103103916