<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Kafka 副本機制 副本機制(Replication) aka. 備份機制:指分布式系統在多臺互聯的機器上保存有相同的數據拷貝 副本優勢 * 提供數據冗余 * 提供高伸縮性 * 支持橫向擴展 * 增加機器即可提升讀性能 * 改善數據局部性 * 允許數據放入用戶地理位置相近的地方從而降低延時 > Apache Kafka 只實現了第一點 ## Kafka 副本定義 * 副本的定義是在分區(Partition)層下定義的,i.e. 每個分區有多個副本 * 副本(Replica):本質是只能追加寫消息的提交日志 * 副本分散保存在不同的 Broker 上 ## Kafka 副本角色 Q:如何確保副本中所有的數據都是一致的? A:基于領導者(Leader-based)的副本機制 ![](https://img.kancloud.cn/2f/a6/2fa6fef8d596f046b628a3befa8d6d9f_1950x1013.png) * Kafka 中副本分為領導者副本(Leader Replica) & 追隨者副本(Follower Replica) * 每個 Partition 創建時都要選舉一個副本,稱為 Leader Replica,其余副本為 Follower Replica * Kafka 中 Follower Replica 不對外提供服務 * 所有讀寫請求均發生在 Leader Replica 所在的 Broker,由該 Broker 負責 * Follower Replica 的唯一職責:從 Leader Replica 異步拉取消息,寫入到自己的提交日志中 * Leader Replica / Broker 宕機時,Kafka 依靠 ZK 提供的監控功能開啟新一輪 Leader Election * 從 Follower Replica 中選取 * 老 Leader Replica 恢復后會作為 Follower Replica 加入集群 這種副本機制設計的優勢 * 方便實現 Read-your-writes * Read-your-writes:當你使用 Producer API 寫消息后,馬上使用 Consumer API 去消費 * 如果允許 Follower 對外提供服務,由于異步,因此不能實現 Read-your-writes * 方便實現單調讀(Monotonic Reads) * 單調讀:對于一個 Consumer,多次消費時,不會看到某條消息一會存在一會不存在 * 問題案例 * 如果允許 Follower 提供服務,假設有兩個 Follower F1、F2 * 如果 F1 拉取了最新消息而 F2 還沒有 * 對于 Consumer 第一次消費時從 F1 看到的消息,第二次從 F2 則可能看不到 * 這種場景是非單調讀 * 所有讀請求通過 Leader 則可以實現單調讀 * In-sync Replicas(ISR) * 對于 Follower 存在與 Leader 不同步的風險 * Kafka 要明確 Follower 在什么條件下算與 Leader 同步,因此引入 ISR 副本集合 * Q:什么副本算作 ISR? * A: * Leader 天然在 ISR 中,某些情況 ISR 中只有 Leader * Kafka 判斷 Follower 和 Leader 同步的標準基于 Broker 端參數 `replica.lag.time.max.ms`,i.e. Follower Replica 能夠落后 Leader Replica 的最長時間間隔,默認值是 10s * 如果一個 Follower 落后 Leader 不超過 10s,則認為該 Follower 是同步的,即該 Follower 被認為是 ISR * ISR 是動態調整的 ## Unclean Leader Election * 由于 ISR 是動態調整的,可能出現 ISR 為空,即 Leader 宕機,Follower 都不同步 * ISR 為空時,如何選舉新 Leader? * `非同步副本`:Kafka 把所有不在 ISR 中的存活副本稱為非同步副本 * Broker 參數 `unclean.leader.election.enable` 控制是否允許 Unclean Leader Election * 即如果參數為 true,ISR 為空是,會從非同步副本中選舉 Leader --- * 優勢:提高可用性 * 缺點:數據丟失 基于 CAP,Kafka 賦予你選擇 C / A 的權利。
                  <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>

                              哎呀哎呀视频在线观看