Kafka——一致性重要機(jī)制之ISR(kafka replica)

一骤坐、kafka replica

  • 1绪杏、當(dāng)某個(gè)topic的replication-factor為N且N大于1時(shí),每個(gè)Partition都會(huì)有N個(gè)副本(Replica)纽绍。kafka的replica包含leader與follower蕾久。

  • 2、Replica的個(gè)數(shù)小于等于Broker的個(gè)數(shù)拌夏,也就是說(shuō)僧著,對(duì)于每個(gè)Partition而言,每個(gè)Broker上最多只會(huì)有一個(gè)Replica障簿,因此可以使用Broker id 指定Partition的Replica盹愚。

  • 3、所有Partition的Replica默認(rèn)情況會(huì)均勻分布到所有Broker上站故。

二杯拐、Data Replication如何Propagate(擴(kuò)散出去)消息?

每個(gè)Partition有一個(gè)leader與多個(gè)follower世蔗,producer往某個(gè)Partition中寫入數(shù)據(jù)是,只會(huì)往leader中寫入數(shù)據(jù)朗兵,然后數(shù)據(jù)才會(huì)被復(fù)制進(jìn)其他的Replica中污淋。

數(shù)據(jù)是由leader push過(guò)去還是有flower pull過(guò)來(lái)?
kafka是由follower周期性或者嘗試去pull(拉)過(guò)來(lái)(其實(shí)這個(gè)過(guò)程與consumer消費(fèi)過(guò)程非常相似)余掖,寫是都往leader上寫寸爆,但是讀并不是任意flower上讀都行,讀也只在leader上讀盐欺,flower只是數(shù)據(jù)的一個(gè)備份赁豆,保證leader被掛掉后頂上來(lái),并不往外提供服務(wù)冗美。

三魔种、Data Replication何時(shí)Commit?

同步復(fù)制:只有所有的follower把數(shù)據(jù)拿過(guò)去后才commit粉洼,一致性好节预,可用性不高叶摄。
異步復(fù)制:只要leader拿到數(shù)據(jù)立即commit,等f(wàn)ollower慢慢去復(fù)制安拟,可用性高蛤吓,立即返回,一致性差一些糠赦。
Commit:是指leader告訴客戶端会傲,這條數(shù)據(jù)寫成功了。kafka盡量保證commit后立即leader掛掉拙泽,其他flower都有該條數(shù)據(jù)淌山。

kafka不是完全同步,也不是完全異步奔滑,是一種ISR機(jī)制:

  • 1艾岂、leader會(huì)維護(hù)一個(gè)與其基本保持同步的Replica列表,該列表稱為ISR(in-sync Replica)朋其,每個(gè)Partition都會(huì)有一個(gè)ISR王浴,而且是由leader動(dòng)態(tài)維護(hù)。

  • 2梅猿、如果一個(gè)flower比一個(gè)leader落后太多氓辣,或者超過(guò)一定時(shí)間未發(fā)起數(shù)據(jù)復(fù)制請(qǐng)求,則leader將其重ISR中移除袱蚓。

  • 3钞啸、當(dāng)ISR中所有Replica都向Leader發(fā)送ACK時(shí),leader才commit喇潘。

既然所有Replica都向Leader發(fā)送ACK時(shí)体斩,leader才commit,那么flower怎么會(huì)leader落后太多颖低?
producer往kafka中發(fā)送數(shù)據(jù)絮吵,不僅可以一次發(fā)送一條數(shù)據(jù),還可以發(fā)送message的數(shù)組忱屑;批量發(fā)送蹬敲,同步的時(shí)候批量發(fā)送,異步的時(shí)候本身就是就是批量莺戒;底層會(huì)有隊(duì)列緩存起來(lái)伴嗡,批量發(fā)送,對(duì)應(yīng)broker而言从铲,就會(huì)收到很多數(shù)據(jù)(假設(shè)1000)瘪校,這時(shí)候leader發(fā)現(xiàn)自己有1000條數(shù)據(jù),flower只有500條數(shù)據(jù)名段,落后了500條數(shù)據(jù)渣淤,就把它從ISR中移除出去赏寇,這時(shí)候發(fā)現(xiàn)其他的flower與他的差距都很小,就等待价认;如果因?yàn)閮?nèi)存等原因嗅定,差距很大,就把它從ISR中移除出去用踩。

commit策略:

server配置
rerplica.lag.time.max.ms=10000
# 如果leader發(fā)現(xiàn)flower超過(guò)10秒沒(méi)有向它發(fā)起fech請(qǐng)求渠退,那么leader考慮這個(gè)flower是不是程序出了點(diǎn)問(wèn)題
# 或者資源緊張調(diào)度不過(guò)來(lái),它太慢了脐彩,不希望它拖慢后面的進(jìn)度碎乃,就把它從ISR中移除。

rerplica.lag.max.messages=4000 # 相差4000條就移除
# flower慢的時(shí)候惠奸,保證高可用性梅誓,同時(shí)滿足這兩個(gè)條件后又加入ISR中,
# 在可用性與一致性做了動(dòng)態(tài)平衡   亮點(diǎn)
topic配置
min.insync.replicas=1 # 需要保證ISR中至少有多少個(gè)replica
Producer配置
request.required.asks=0
# 0:相當(dāng)于異步的佛南,不需要leader給予回復(fù)梗掰,producer立即返回,發(fā)送就是成功,
  那么發(fā)送消息網(wǎng)絡(luò)超時(shí)或broker crash(1.Partition的Leader還沒(méi)有commit消息 2.Leader與Follower數(shù)據(jù)不同步)嗅回,
  既有可能丟失也可能會(huì)重發(fā)
# 1:當(dāng)leader接收到消息之后發(fā)送ack及穗,丟會(huì)重發(fā),丟的概率很小
# -1:當(dāng)所有的follower都同步消息成功后發(fā)送ack.  丟失消息可能性比較低
注意:新版kafka中绵载,去除了rerplica.lag.max.messages設(shè)置埂陆,只保留了rerplica.lag.time.max.ms設(shè)置

四、Data Replication如何處理Replica恢復(fù)

leader掛掉了娃豹,從它的follower中選舉一個(gè)作為leader焚虱,并把掛掉的leader從ISR中移除,繼續(xù)處理數(shù)據(jù)懂版。一段時(shí)間后該leader重新啟動(dòng)了著摔,它知道它之前的數(shù)據(jù)到哪里了,嘗試獲取它掛掉后leader處理的數(shù)據(jù)定续,獲取完成后它就加入了ISR。

五禾锤、Data Replication如何處理Replica全部宕機(jī)

  • 1私股、等待ISR中任一Replica恢復(fù),并選它為L(zhǎng)eader。

    • 1)恩掷、等待時(shí)間較長(zhǎng)倡鲸,降低可用性。
    • 2)黄娘、或ISR中的所有Replica都無(wú)法恢復(fù)或者數(shù)據(jù)丟失峭状,則該P(yáng)artition將永不可用克滴。
  • 2、選擇第一個(gè)恢復(fù)的Replica為新的Leader,無(wú)論它是否在ISR中优床。

    • 1)劝赔、并未包含所有已被之前Leader Commit過(guò)的消息,因此會(huì)造成數(shù)據(jù)丟失胆敞。
    • 2)着帽、可用性較高。

參考:
https://blog.csdn.net/qq_37502106/article/details/80271800

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末移层,一起剝皮案震驚了整個(gè)濱河市仍翰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌观话,老刑警劉巖予借,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異频蛔,居然都是意外死亡灵迫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門帽驯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)龟再,“玉大人,你說(shuō)我怎么就攤上這事尼变±眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嫌术,是天一觀的道長(zhǎng)哀澈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)度气,這世上最難降的妖魔是什么割按? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮磷籍,結(jié)果婚禮上适荣,老公的妹妹穿的比我還像新娘。我一直安慰自己院领,他們只是感情好弛矛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著比然,像睡著了一般丈氓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天万俗,我揣著相機(jī)與錄音湾笛,去河邊找鬼。 笑死闰歪,一個(gè)胖子當(dāng)著我的面吹牛嚎研,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播课竣,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼嘉赎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了于樟?” 一聲冷哼從身側(cè)響起公条,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迂曲,沒(méi)想到半個(gè)月后靶橱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡路捧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年关霸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杰扫。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡队寇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出章姓,到底是詐尸還是另有隱情佳遣,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布凡伊,位于F島的核電站零渐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏系忙。R本人自食惡果不足惜诵盼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望银还。 院中可真熱鬧风宁,春花似錦、人聲如沸蛹疯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苍苞。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羹呵,已是汗流浹背骂际。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冈欢,地道東北人歉铝。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凑耻,于是被迫代替她去往敵國(guó)和親太示。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容