(7)ISR、AR代表什么?ISR伸縮是什么?

AR(Assigned Repllicas):分區(qū)中所有副本統(tǒng)稱

ISR(In-Sync Replicas):與leader副本保持一定程度同步的副本(包括Leader)

OSR(Out-Sync Relipcas):與leader滯后過(guò)多副本(不包括leader)ps:參數(shù)配置滯后范圍

AR=ISR+OSR。正常情況AR=ISR ,OSR空

LEO(LogEndOffse):下一條待寫(xiě)入消息offset,partition的log最后一條消息offset+1。

HW(HighWatermark):consumer能看到partition位置,partition對(duì)應(yīng)ISR中最小LEO為HW。

????HW為6.表示消費(fèi)者只能拉取到offset0至5之間的消息,而offset為6的消息對(duì)消費(fèi)者而言是不可見(jiàn)的(圖2)

LW(LowWatermark):“低水位”,AR中最小logStartOffset,副本拉取請(qǐng)求(FetchRequest,可能觸發(fā)新建日志分段而舊的被清理,導(dǎo)致logStartoffset增加)和刪除請(qǐng)求DeleteRecordRequest都可能促使LW增長(zhǎng)

概要:一、ISR 的伸縮性:定期檢查是否伸縮、緩存

? ? ? ? ? ?二、何時(shí)擴(kuò)充ISR:1)follower追趕上,2)hw保證一致性

? ? ? ? ? ?三、同步過(guò)程:寫(xiě)leader,再同步

? ?????????四、LSO(LastStableOffset)與kafka的事物有關(guān):讀提交,讀未提交

一、ISR 的伸縮性

1)Leader跟蹤維護(hù)ISR中follower滯后狀態(tài),落后太多或失效時(shí),leade把他們從ISR剔除。2)OSR中follower“追上”Leader,在ISR中才有資格選舉leader

Kafka啟動(dòng)開(kāi)啟ISR相關(guān)定時(shí)任務(wù)“isr-expiration"和”isr-change-propagation"

1、isr-expiration:周期性檢測(cè) 分區(qū)是否縮減ISR。

? ? 1)“replica.lag.time.max.ms”設(shè)置周期,大小是這個(gè)參數(shù)一半,默認(rèn)5000ms,

? ? 2)檢測(cè)到ISR有失效副本時(shí),縮減ISR集合,記錄到zk對(duì)應(yīng)/brokers/topics//partition//state節(jié)點(diǎn)如下:

????{“controller_cpoch":26,“l(fā)eader”:0,“version”:1,“l(fā)eader_epoch”:2,“isr”:{0,1}}

???? 其中controller_epoch:kafka控制器epoch.leader,前分區(qū)leader所在broker的idversion版本號(hào)(當(dāng)前半本固定位1),leader_epoch當(dāng)前分區(qū)leader紀(jì)元,變更后isr列表

2、isr-change-propagation:周期性(固定2500ms)檢查isrChangeSet(記錄變更后緩存)

? ? 1)發(fā)現(xiàn)變更,在zk的/isr_change_notification創(chuàng)建isr_change開(kāi)頭持久順序節(jié)點(diǎn)存isrChangeSet信息:如/isr_change_notification/isr_change_0000000000 ,?

? ? 2)kafka控制器為/isr_change_notification添加Watcher,子節(jié)點(diǎn)變化觸發(fā)Watcher,通知控制器和管理broker節(jié)點(diǎn)更新元數(shù)據(jù),刪除/isr_change_notification下已處理節(jié)點(diǎn)。

? ? 3)避免頻繁觸發(fā)Watcher影響控制器、zk、broker性能,檢查:上次ISR變化超過(guò)5秒,上次寫(xiě)zk超過(guò)60秒

二、何時(shí)擴(kuò)充ISR

1、不斷同步,follower的LEO后移,追趕上leader判定準(zhǔn)側(cè)是follower的LEO是否小于leader副本HW

2、ISR擴(kuò)充同樣更新zk中的/broker/topics//partition//state節(jié)點(diǎn)和isrChangeSet,之后和收縮時(shí)相同。ISR增減時(shí),或LEO變時(shí),影響整個(gè)分區(qū)HW。

????如leader的LEO為9,follower的LEO為7,follower2的LEO為6,判定都處于ISR中,分區(qū)HW6,如follower2被剝離ISR,HW為leader和follower中LEO最小值為7(木桶原理

3、HW保證一致性

Leader掛了,在新Leader可讀HW,即對(duì)外可見(jiàn)最大offset,HW=max(replica.offset)

例:新msg,等ISR中replica同步后,更新HW,才消費(fèi),保證如Leader fail,仍可從新Leader中獲?。ㄅ渲醚舆t時(shí)間replica.lag.time.max.ms)

ps:內(nèi)部Broker讀,沒(méi)HW限制。Folloer.HW = min(Leader.HW, Follower.offset)

圖2

三、同步過(guò)程

ISR中一個(gè)leader和兩個(gè)follower副本,LEO和HW都為3。消息3和4從生產(chǎn)者發(fā)出后先存leader

follower1完全leader而follower2只同步消息3,leader、follower1的LEO為5,F(xiàn)ollower2的LEO為4。HW最小值4,可以消費(fèi)offset為0-3消息;所有都成功寫(xiě)入3、4,HW和LEO為5,可消費(fèi)offset為4消息。

四、LSO(LastStableOffset)與kafka的事物有關(guān)

配置消費(fèi)者事務(wù)隔離級(jí)別:消費(fèi)端參數(shù)——isolation.level(字符串類型)

1、設(shè)置消費(fèi)到位置

1)“read_committed",消費(fèi)會(huì)忽略事務(wù)未提交,只能消費(fèi)到LSO(LastStableOffset)位置

2)默認(rèn)”read_uncommitted",可消費(fèi)HW(High Watermak)位置。

????ps:follower事務(wù)隔離級(jí)別也“read_uncommitted",且不可改

例:開(kāi)啟kafka事務(wù)時(shí),生產(chǎn)者發(fā)消息1、2到broker,如沒(méi)有提交事務(wù),isolation.level=read_committed的消費(fèi)者看不到消息,而isolation.level=read_uncommitted可到。事務(wù)中第一條消息位置標(biāo)記為firstUnstableOffset

2、LSO還影響kafka消費(fèi)后量

就是kafka,Log,也稱kafka堆積量計(jì)算。

1)普通情況:Lag = HW-ConsumerOffset

2)引入了事務(wù):read_uncommitted不受影響,read_committed引入LSO計(jì)算:

? ? ? ? 未完成事務(wù),LSO=事務(wù)第一條消息位置(firstUnstableOffset)

? ? ? ? 已經(jīng)完成=HW,

結(jié)論:LSO≤HW≤LEO

未完成read_committed,Lag=LSO-ComsumerOffset

https://blog.csdn.net/weixin_43975220/article/details/93190906

https://blog.csdn.net/qq_41568597/article/details/82501738

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容