# Kafka Controller
* 控制器组件 aka. Controller
* 作用:在 ZK 的帮助下管理和协调整个 Kafka 集群
* 任意一台 Broker 可以成为 Controller,但是只有一台会是 Controller
* Controller 重度依赖 ZK
ZK
* 提供高可靠性的分布式协调服务框架
* ZK 使用文件系统的树形结构构建数据模型
* 每个节点称为 znode,可以保存一些元数据协调信息
* 以 znode 的持久性划分
* 持久性 znode
* 不会因为 ZK 重启而消失
* 临时 znode
* 与创建 znode 的 ZK session 绑定,session 结束,节点自动删除
* ZK 允许 Client 通过 watch 监控 znode
* Kafka Controller 通过 watch 实现对 Kafka 集群的协调管理
## 控制器的选取
* Broker 启动时,会尝试创建 ZK 中 /controller znode
* 第一个创建 /controller 的 Broker 会是 Controller
## 控制器的功能
* topic 管理
* 当使用 kafka-topics 脚本时,后台工作通过 controller 完成
* 分区重分配
* i.e. kafka-reassign-partitions 脚本
* 对已有 topic 分区进行细粒度的分配
* Preferred Leader 选举
* 目的:Kafka 为了避免部分 Broker 负载过重而提供的一种换 Leader 的方案
* 集群成员管理(新增 Broker、Broker 主动关闭、Broker 宕机)
* 自动检测 Broker
* controller 通过 watch 机制检查 ZK 的 /brokers/ids 子节点数量变更
* 数据服务
* controller 向其他 Broker 提供数据服务
* controller 上保存了最全的集群元数据
![](https://img.kancloud.cn/38/ff/38ff78fdeb2a86943ae60f15c3ad28c8_2955x2105.jpg)
## 控制器故障转移 Failover
* Controller 存在单点
* 故障转移:当运行中的 Controller 突然宕机,Kafka 能够快速感知,并立即启用备用 Controller 代替之前失败的 Controller,这个过程称为 Failover
![](https://img.kancloud.cn/12/89/128903a88ea1c9dd27f6a62e496b44ed_3930x1905.jpg)
## Controller 设计原理
* Kafka 0.11 版本之前,设计复杂
* Controller 是多线程
* 每个 Broker 都创建一个对应的 Socket,再创建一个专属线程
* Controller 连接 ZK session,也会创建单独的线程处理 watch 机制的回调
* Controller 还会为 topic 删除创建额外的 IO 线程
* 这些线程会访问共享的 Controller 缓存数据
* 因此大量使用 ReentrantLock 同步机制,拖慢整个 Controller 处理速度
* 0.11 版本重构
* 把多线程方案改成单线程加事件队列的方案
![](https://img.kancloud.cn/b1/4c/b14c6f2d246cbf637f2fda5dae1688e5_1950x1158.png)
* 事件处理线程 Event Executor Thread
* 统一处理 controller event
* 负责缓存状态变更工作
* 优势
* Controller 缓存只被一个线程处理,不需要同步机制保证线程安全
* 同步操作 ZK 全部改为异步
* ZK API 提供同步、异步两种方式
* 2.2 版本
* 支持不同优先级的请求处理,i.e. 抢占式处理
## Tips
* 如果发现 controller 出现问题,不需要重启 Kafka Broker
* 只需要连接 ZK,手动删除 /controller
- 概览
- 入门
- 1. 消息引擎系统
- 2. Kafka 术语
- 3. 分布式流处理平台
- 4. Kafka “发行版”
- 5. Kafka 版本号
- 基本使用
- 6. 生产集群部署
- 7. 集群参数配置
- 客户端实践与原理
- 9. Consumer 分区机制
- 10. Consumer 压缩算法
- 11. 无消息丢失配置
- 12. 客户端高级功能
- 13. Producer 管理 TCP
- 14. 幂等生产者和事务生产者
- 15. 消费者组
- 16. 位移主题
- 17. 消费者组重平衡(TODO)
- 18. 位移提交
- 19. CommitFailedException
- 20. 多线程开发者实例
- 21. Consumer 管理 TCP
- 22. 消费者组消费进度监控
- Kafka 内核
- 23. 副本机制
- 24. 请求处理
- 25. Rebalance 全流程
- 26. Kafka 控制器
- 27. 高水位和 Leader Epoch
- 管理与监控
- 28. Topic 管理
- 29. Kafka 动态配置
- 30. 重设消费者组位移
- 31. 工具脚本
- 32. KafkaAdminClient
- 33. 认证机制
- 34. 云下授权
- 35. 跨集群备份 MirrorMaker
- 36. 监控 Kafka
- 37. Kafka 监控框架
- 38. 调优 Kafka
- 39. 实时日志流处理平台
- 流处理
- 40. Kafka Streams
- 41. Kafka Streams DSL
- 42. Kafka Streams 金融
- Q&A