Kafka控制器你真得了解吗?
1、全局纵览架构变迁的故事
2、深入了解控制器的原理
控制器组件(Controller),是 Apache Kafka 的核心组件。
它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。
集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。
换句话说,每个正常运转的 Kafka 集群,在任意时刻都有且只有一个控制器。
官网上有个名为 activeController 的 JMX 指标,可以帮助我们实时监控控制器的存活状态。
这个 JMX 指标非常关键,你在实际运维操作过程中,一定要实时查看这个指标的值。
Apache ZooKeeper 是一个提供高可靠性的分布式协调服务框架。它使用的数据模型类似于文件系统的树形结构,根目录也是以“/”开始。该结构上的每个节点被称为 znode,用来保存一些元数据协调信息。
如果以 znode 持久性来划分,znode 可分为持久性 znode 和临时 znode。
持久性 znode 不会因为 ZooKeeper 集群重启而消失,而临时 znode 则与创建该 znode 的 ZooKeeper 会话绑定,一旦会话结束,该节点会被自动删除。
ZooKeeper 赋予客户端监控 znode 变更的能力,即所谓的 Watch 通知功能。
一旦 znode 节点被创建、删除,子节点数量发生变化,抑或是 znode 所存的数据本身变更,ZooKeeper 会通过节点变更监听器 (ChangeHandler) 的方式显式通知客户端。
依托于这些功能,ZooKeeper 常被用来实现集群成员管理、分布式锁、领导者选举等功能。
Kafka 控制器大量使用 Watch 功能实现对集群的协调管理。
我们一起来看一张图片,它展示的是 Kafka 在 ZooKeeper 中创建的 znode 分布。
你不用了解每个 znode 的作用,但你可以大致体会下 Kafka 对 ZooKeeper 的依赖。
Controller控制器保存了什么数据?
image.png image.png image.png image.png image.png image.png image.png
当你觉得控制器组件出现问题时,比如主题无法删除了,或者重分区 hang 住了,你不用重启 Kafka Broker 或控制器。
有一个简单快速的方式是,去 ZooKeeper 中手动删除 /controller 节点。
具体命令是 rmr /controller。这样做的好处是,既可以引发控制器的重选举,又可以避免重启 Broker 导致的消息处理中断。
参考
kafka Controller概念、作用、原理以及新老架构对比
https://www.bilibili.com/video/BV13L411L7CJ
网友评论