自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:Leader崩潰Follower不夠新怎么辦?

云計(jì)算 Kafka
數(shù)據(jù)一致性問題是指在一個系統(tǒng)中,不同部分的數(shù)據(jù)在邏輯上應(yīng)該保持一致,但實(shí)際情況卻出現(xiàn)了矛盾或不匹配的現(xiàn)象。

這是一道非常經(jīng)典的 Kafka 問題,是關(guān)于 Leader 在“異?!鼻闆r下的選舉問題。

背景

我們知道 Kafka 中的 Partition(分區(qū))是存儲消息的最終介質(zhì),但 Partition 又有兩種分類:

  • Leader Partition:主分區(qū),負(fù)責(zé)數(shù)據(jù)寫入和讀取。
  • Follower Partition:副本分區(qū),用于數(shù)據(jù)備份和主節(jié)點(diǎn)宕機(jī)之后的分區(qū)選舉,保證了 Kafka 服務(wù)的高可用。

如下圖所示:

其中,Leader Partition 是用來處理生產(chǎn)者和消費(fèi)者請求的,而 Follower Partition 是用來保證 Kafka 集群的高可用的,也就是當(dāng) Leader Partition 宕機(jī)之后,會通過某種算法將其中一個 Follower Partition 升級為 Leader Partition 繼續(xù)運(yùn)行。

不同步的 Follower 節(jié)點(diǎn)

在分布式系統(tǒng)下,數(shù)據(jù)一致性問題是一個令人頭疼的問題,那么這個問題在 Kafka Leader Partition 和 Follower Partition 中也存在,例如以下場景:

也就是說,F(xiàn)ollower Partition 還未從 Leader Partition 中同步到最新的數(shù)據(jù),Leader Partition 就突然宕機(jī)了,這就產(chǎn)生了不同的 Follower 節(jié)點(diǎn)了。

小知識點(diǎn):數(shù)據(jù)一致性問題是指在一個系統(tǒng)中,不同部分的數(shù)據(jù)在邏輯上應(yīng)該保持一致,但實(shí)際情況卻出現(xiàn)了矛盾或不匹配的現(xiàn)象。

那問題來了,如果有不同步的 Follower Partition 要升級為 Leader 會發(fā)生什么問題?

升級 VS 不升級

當(dāng)出現(xiàn)不同步的 Follower Partition,而 Leader Partition 有意外宕機(jī)的場景,此時我們有兩種選擇:

  • 將不同步的 Follower 節(jié)點(diǎn)升級為 Leader 節(jié)點(diǎn):但這樣就會造成數(shù)據(jù)丟失的問題,但好處是此時集群可以繼續(xù)運(yùn)行。
  • 不同步的 Follower 不自動升級 Leader 節(jié)點(diǎn):等待原 Leader 恢復(fù)再繼續(xù)運(yùn)行,此時不會導(dǎo)致數(shù)據(jù)丟失,但可能要等待很久才能恢復(fù) Kafka 服務(wù)的正常運(yùn)行,因?yàn)?Leader 宕機(jī)可能要更新內(nèi)存芯片之后才能運(yùn)行,而這個時間是比較久的。

所以,不同步的 Follower 節(jié)點(diǎn)是升級為 Leader 或不升級為 Leader 都有其優(yōu)點(diǎn)和缺點(diǎn)。

使用者的選擇權(quán)

而在這種情況下,Kafka 就把這個選擇權(quán)給使用者了,此時我們可以通過配置 Broker(或集群)的“unclean.leader.election.enable”屬性來決定到底要不要升級不同步的 Follower 節(jié)點(diǎn)為 Leader 節(jié)點(diǎn),這個屬性有以下兩個值可以設(shè)置:

  • true:如果此屬性設(shè)置為 true,那么即使是不完全同步的 Follower Partition 也會升級為 Leader,此時犧牲了一定的數(shù)據(jù)一致性(數(shù)據(jù)丟失風(fēng)險(xiǎn)),保證了 Kafka 服務(wù)的高可用。
  • false:如果此屬性設(shè)置為 false,就表示不會將不完全同步的 Follower Partition 升級為 Leader,會等待原 Leader 重新上線之后才能繼續(xù)運(yùn)行 Kafka 服務(wù)。此時保證了數(shù)據(jù)的一致性,但犧牲了 Kafka 服務(wù)的可用性。

unclean.leader.election.enable 的默認(rèn)值為 true。

因此,如果是對數(shù)據(jù)丟失不敏感的系統(tǒng)可以使用 unclean.leader.election.enable=true,如果對數(shù)據(jù)丟失敏感的,例如銀行系統(tǒng)等可以使用 unclean.leader.election.enable=false 保證數(shù)據(jù)的一致性。

責(zé)任編輯:姜華 來源: 磊哥和Java
相關(guān)推薦

2021-09-06 12:58:26

MQ面試數(shù)據(jù)庫

2022-06-24 09:22:15

MySQL自增id

2020-03-28 15:50:18

數(shù)據(jù)庫自增ID維護(hù)

2024-03-27 14:39:48

MySQL數(shù)據(jù)庫分庫分表

2019-09-18 15:49:06

MySQL數(shù)據(jù)庫面試官

2024-09-03 09:20:45

2022-02-14 15:03:50

MySQL程序員面試

2024-07-23 08:21:19

2022-02-06 00:16:53

加密貨幣比特幣以太坊

2022-05-23 08:43:02

BigIntJavaScript內(nèi)置對象

2017-12-04 08:37:31

存儲空間NAS

2017-03-23 11:24:26

Windows 10Windows系統(tǒng)盤

2015-08-13 10:29:12

面試面試官

2022-12-05 10:47:08

RocketMQ灰度消息

2025-03-10 00:28:00

2023-02-16 08:10:40

死鎖線程

2017-02-22 14:46:04

Leader-Foll線程

2021-04-13 10:41:25

Redis內(nèi)存數(shù)據(jù)庫

2023-12-26 09:34:47

系統(tǒng)MongoDB存儲

2021-04-12 21:34:29

Redis故障數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號