# 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 上保存了最全的集群元數據

## 控制器故障轉移 Failover
* Controller 存在單點
* 故障轉移:當運行中的 Controller 突然宕機,Kafka 能夠快速感知,并立即啟用備用 Controller 代替之前失敗的 Controller,這個過程稱為 Failover

## Controller 設計原理
* Kafka 0.11 版本之前,設計復雜
* Controller 是多線程
* 每個 Broker 都創建一個對應的 Socket,再創建一個專屬線程
* Controller 連接 ZK session,也會創建單獨的線程處理 watch 機制的回調
* Controller 還會為 topic 刪除創建額外的 IO 線程
* 這些線程會訪問共享的 Controller 緩存數據
* 因此大量使用 ReentrantLock 同步機制,拖慢整個 Controller 處理速度
* 0.11 版本重構
* 把多線程方案改成單線程加事件隊列的方案

* 事件處理線程 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