<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 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
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看