Kafka的ISR、OSR、AR詳解

Kafka中的ISR、OSR和AR是副本管理機制的核心概念,它們共同保障了Kafka的高可用性和數據一致性。下面我將詳細解釋這些概念及其相互關系。

1. 基本概念

1.1 AR (Assigned Replicas) - 分配副本

定義:一個分區的所有副本集合稱為AR,即Kafka為主題分區分配的所有副本。

特點

  • 包含該分區的所有副本(Leader和Follower)
  • AR = ISR + OSR
  • 由Kafka控制器(Controller)負責管理分配

1.2 ISR (In-Sync Replicas) - 同步副本

定義:與Leader副本保持同步的副本集合(包括Leader自己)。

特點

  • 實時與Leader保持數據同步
  • 只有ISR中的副本才有資格被選舉為Leader
  • 生產者消息需要被ISR中所有副本確認才算提交成功(取決于acks配置)

1.3 OSR (Out-of-Sync Replicas) - 非同步副本

定義:與Leader副本同步滯后過多的副本集合。

特點

  • 未能及時跟上Leader的同步進度
  • 不在ISR集合中
  • 當OSR副本重新追上Leader進度后,可以重新加入ISR

2. 工作機制詳解

2.1 副本狀態轉換

[新副本] → [ISR] ? [OSR]
  • 新創建的副本初始加入ISR
  • 當副本滯后超過replica.lag.time.max.ms(默認30秒)時,從ISR移到OSR
  • 當OSR副本追上Leader進度后,重新加入ISR

2.2 同步判定標準

副本是否保持同步由以下參數控制:

  1. replica.lag.time.max.ms (默認30000ms)

    • Follower副本在此時間內未向Leader發送FETCH請求
    • 或在此時間內未追上Leader的最新offset
  2. replica.lag.max.messages (已棄用)

    • 舊版本用于判斷消息滯后條數
    • 新版本已移除該配置

2.3 Leader選舉

當分區Leader失效時:

  1. 只能從ISR集合中選舉新Leader
  2. 如果ISR為空,根據unclean.leader.election.enable配置決定:
    • false(默認):不允許選舉,分區不可用
    • true:可以從OSR中選舉(可能丟失數據)

3. 配置參數

參數默認值說明
default.replication.factor1新建主題的默認副本數
min.insync.replicas1最小同步副本數(影響生產者acks=all時的可用性)
replica.lag.time.max.ms30000副本滯后時間閾值
unclean.leader.election.enablefalse是否允許從非同步副本選舉Leader

4. 數據一致性保障

Kafka通過ISR機制實現不同級別的一致性:

  1. acks=0:不等待確認,可能丟失數據
  2. acks=1:僅等待Leader確認(默認)
  3. acks=all:等待ISR中所有副本確認

生產環境推薦配置:

min.insync.replicas=2
acks=all

這樣即使一個副本失效,仍能保證數據安全。

5. 監控與管理

5.1 查看副本狀態

使用kafka-topics命令:

bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test

輸出示例:

Topic: test Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2
  • Replicas: AR列表(1,2,3)
  • Isr: 同步副本列表(1,2)
  • OSR = AR - ISR = 3

5.2 重要監控指標

  1. UnderReplicatedPartitions:非充分復制分區數(ISR < AR)
  2. IsrShrinksPerSec:ISR收縮次數(副本離開ISR)
  3. IsrExpandsPerSec:ISR擴展次數(副本加入ISR)

6. 生產環境建議

  1. 設置replication.factor≥3,保證高可用
  2. 設置min.insync.replicas=2,平衡可用性與一致性
  3. 監控ISR變化,異常時及時報警
  4. 避免頻繁的Leader切換(配置合理的replica.lag.time.max.ms
  5. 保持unclean.leader.election.enable=false,防止數據丟失

7. 故障場景分析

場景1:Follower副本同步慢

  • 現象:某個Follower持續在OSR中
  • 可能原因:
    • 磁盤I/O瓶頸
    • 網絡延遲
    • 機器負載過高
  • 解決方案:
    • 檢查副本節點硬件狀態
    • 優化Kafka JVM配置
    • 考慮替換問題節點

場景2:ISR頻繁收縮/擴展

  • 現象:IsrShrinks/IsrExpands指標頻繁變化
  • 可能原因:
    • replica.lag.time.max.ms設置過小
    • 網絡不穩定
  • 解決方案:
    • 適當增大replica.lag.time.max.ms
    • 檢查網絡狀況

通過合理配置和監控ISR機制,可以確保Kafka集群在保證數據一致性的同時,維持高可用性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第一階段C#基礎-13:索引器,接口,泛型

1_索引器&#xff08;1&#xff09;索引器是C#中一個強大而實用的特性&#xff0c;允許像訪問數組一樣訪問類的成員&#xff08;2&#xff09;索引器&#xff1a;一種可以讓我們使用索引來訪問對象的一種方法&#xff0c;是一組get,set訪問器&#xff0c;與屬性類似&#xff0c…

SQL-leetcode— 2356. 每位教師所教授的科目種類的數量

2356. 每位教師所教授的科目種類的數量 表: Teacher ----------------- | Column Name | Type | ----------------- | teacher_id | int | | subject_id | int | | dept_id | int | ----------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是該表的主鍵。 該表…

基于單片機溫控風扇設計/PWM調速風扇/智能風扇

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 該設計基于單片機實現智能溫控風扇系統&#xff0c;通過溫度傳感器實時監測環境溫度&#xff0c;…

【datawhale組隊學習】RAG技術 - TASK02

教程地址&#xff1a;https://github.com/datawhalechina/all-in-rag/ 感謝datawhale的教程&#xff0c;以下筆記大部分內容來自該教程 文章目錄基于LangChain框架的RAG實現初始化設置數據準備索引構建查詢與檢索生成集成低代碼&#xff08;基于LlamaIndex&#xff09;conda ac…

Mitt 事件發射器完全指南:200字節的輕量級解決方案

簡介 Mitt 是一個輕量級的事件發射器庫&#xff0c;體積小巧&#xff08;約 200 字節&#xff09;&#xff0c;無依賴&#xff0c;支持 TypeScript。它提供了簡單而強大的事件發布/訂閱機制&#xff0c;適用于組件間通信、狀態管理等場景。 特點 &#x1f680; 超輕量級&…

數據庫鎖與死鎖-筆記

一、概述 數據庫是一個共享資源,可以供給多個用戶使用。運行多個用戶同時使用一個數據庫的數據系統統稱多用戶數據庫系統。例如,飛機訂票數據庫系統。在這樣的一個系統中,在同一時刻并發運行的事務數可達數百上千個。 當多個用戶并發地存取數據庫時就會產生多個事務同時存…

滲透藝術系列之Laravel框架(二)

任何軟件&#xff0c;都會存在安全漏洞&#xff0c;我們應該將攻擊成本不斷提高&#xff01;?**——服務容器與中間件的攻防博弈**?本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01;一、服務容器的"依賴注入陷阱"1.1 接口綁定的"影子服務"…

官網SSO登錄系統的企業架構設計全過程

第一階段&#xff1a;架構愿景與業務架構設計 (Architecture Vision & Business Architecture) 任何架構的起點都必須是業務目標和需求。 1.1 核心業務目標 (Business Goals) 提升用戶體驗&#xff1a;用戶一次登錄&#xff0c;即可無縫訪問集團下所有子公司的官網和應用&a…

2025世界機器人大會:中國制造“人形時代”爆發

2025世界機器人博覽會8月8日在北京亦莊開幕&#xff0c;主題為“讓機器人更智慧&#xff0c;讓具身體更智能”&#xff0c;匯聚全球200余家企業、1500余件展品&#xff0c;其中首發新品超100款&#xff0c;人形機器人整機企業參展數量創同類展會之最。 除了機器人本體外&#…

Oracle 庫定期備份表結構元數據信息至目標端備份腳本

一、背景描述當前 xxx 項目 Oracle 11g RAC 庫缺少 DG&#xff0c;并且日常沒有備份&#xff0c;存在服務器或存儲損壞&#xff0c;數據或表結構存在丟失風險&#xff0c;在和項目組同步后&#xff0c;項目組反饋可對該數據庫定期備份相關結構信息&#xff0c;如存在數據丟失&a…

wps安裝后win系統瀏覽窗口無法查看

前提需要有安裝office軟件&#xff0c;PDF一般默認是瀏覽器&#xff0c;如果設置瀏覽器不行&#xff0c;就安裝Adobe Acrobat DC軟件1、按winR鍵&#xff0c;輸入regedit&#xff0c;進入注冊表2、找到路徑&#xff1a;\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current…

Qt 中最經典、最常用的多線程通信場景

實現步驟創建工作類 (Worker)&#xff1a;在工作線程中處理數據的對象。創建線程對象 (QThread)&#xff1a;用來托管工作對象。連接信號槽&#xff1a;主線程 -> 工作線程&#xff1a;連接一個主窗口發出的信號到工作對象的槽&#xff0c;用于傳遞數據。工作線程 -> 主線…

【CV 目標檢測】Fast RCNN模型①——與R-CNN區別

3.Fast RCNN模型 相比于R-CNN&#xff0c;Fast RCNN模型主要在以下三個方面進行了改進&#xff1a; 提高訓練和預測速度 R-CNN首先從測試圖中提取2000個候選區域&#xff0c;然后將這2000個候選區域分別輸入到預訓練好的CNN中提取特征。由于候選區域有大量的重疊&#xff0c;這…

Zookeeper學習

要精通 ZooKeeper&#xff0c;需要掌握其核心原理、數據模型、分布式協調機制、典型應用場景、運維管理與性能調優等方面的知識。以下是系統化的知識體系&#xff1a;? 一、ZooKeeper 基礎原理ZooKeeper 是什么 分布式協調服務&#xff0c;提供一致性、高可用的元數據管理核心…

用TestComplete打造高效CI/CD測試流程

傳統的UI測試往往受限于圖形界面渲染&#xff0c;導致執行速度慢、資源占用高&#xff0c;難以適應持續集成/持續交付&#xff08;CI/CD&#xff09;管道的需求。自動化UI測試平臺TestComplete的智能質量附加組件通過無頭測試技術&#xff0c;為開發團隊提供了一種更高效、更可…

C++ 淺拷貝 和深拷貝的知識點講解

好問題 &#x1f44d;&#xff0c;這個就是理解 delete 的關鍵前置知識。 我從 C語言基礎 出發&#xff0c;像教科書一樣&#xff0c;從零講給你聽。1. 什么是“拷貝”&#xff1f; 在 C 中&#xff0c;當你有一個對象 A&#xff0c;然后寫&#xff1a; Device_Info a; Device…

Arkts加載網頁url的pdf發票黑屏問題

使用模擬器會閃退&#xff0c;連接真機預覽正常import { HMRouter, HMRouterMgr, HMParamType, HMPageParam } from "hadss/hmrouter"; import { BaseTitle, RouterConstants } from "commonlib"; import { webview } from kit.ArkWeb; import { PDFView }…

使用 mongosh 設置 MongoDB 賬號密碼

可以使用 mongosh(MongoDB 6.0+ 的現代Shell)來設置賬號密碼。mongosh 是官方推薦的新一代MongoDB Shell工具,替代了傳統的 mongo 命令。 【本人博文提到的ip均為隨機生成的,不是實際的ip,僅供參考,如有雷同,純屬巧合】 使用 mongosh 設置 MongoDB 賬號密碼 1. 首先連…

HTML+CSS:浮動詳解

在HTMLCSS布局中&#xff0c;浮動&#xff08;float&#xff09; 是一種經典的布局技術&#xff0c;用于控制元素在頁面中的排列方式。它最初設計用于實現文字環繞圖片的效果&#xff0c;后來被廣泛用于復雜布局&#xff0c;但隨著Flexbox和Grid的興起&#xff0c;其使用場景有…

GPIO初始化及調用

下面把 HAL 庫 和 標準外設庫&#xff08;SPL&#xff09; 初始化 GPIO 點亮/熄滅 LED 的完整步驟、示例代碼和常用 API 逐一說清楚。用例默認 PC13 接 LED&#xff08;藍板常見&#xff1b;低電平點亮&#xff0c;高電平熄滅——若板子相反&#xff0c;只把寫 1/0 對調即可&am…