Kafka快速入門(mén)系列(7) | producer(生產(chǎn)者)的數(shù)據(jù)可靠性保證
本篇博主帶來(lái)的是producer(生產(chǎn)者)的數(shù)據(jù)可靠性保證。
目錄
1. 副本數(shù)據(jù)同步策略
2. ISR
3. ack應(yīng)答機(jī)制
4. 故障處理細(xì)節(jié)
1. follower故障
2. leader故障
為保證producer發(fā)送的數(shù)據(jù),能可靠的發(fā)送到指定的topic,topic的每個(gè)partition收到producer發(fā)送的數(shù)據(jù)后,都需要向producer發(fā)送ack(acknowledgement確認(rèn)收到),如果producer收到ack,就會(huì)進(jìn)行下一輪的發(fā)送,否則重新發(fā)送數(shù)據(jù)。
1. 副本數(shù)據(jù)同步策略
Kafka選擇了第二種方案,原因如下:
1.同樣為了容忍n臺(tái)節(jié)點(diǎn)的故障,第一種方案需要2n+1個(gè)副本,而第二種方案只需要n+1個(gè)副本,而Kafka的每個(gè)分區(qū)都有大量的數(shù)據(jù),第一種方案會(huì)造成大量數(shù)據(jù)的冗余。
2.雖然第二種方案的網(wǎng)絡(luò)延遲會(huì)比較高,但網(wǎng)絡(luò)延遲對(duì)Kafka的影響較小。
2. ISR
采用第二種方案之后,設(shè)想以下情景:leader收到數(shù)據(jù),所有follower都開(kāi)始同步數(shù)據(jù),但有一個(gè)follower,因?yàn)槟撤N故障,遲遲不能與leader進(jìn)行同步,那leader就要一直等下去,直到它完成同步,才能發(fā)送ack。這個(gè)問(wèn)題怎么解決呢?
Leader維護(hù)了一個(gè)動(dòng)態(tài)的in-sync replica set (ISR),意為和leader保持同步的follower集合。當(dāng)ISR中的follower完成數(shù)據(jù)的同步之后,leader就會(huì)給follower發(fā)送ack。如果follower長(zhǎng)時(shí)間未向leader同步數(shù)據(jù),則該follower將被踢出ISR,該時(shí)間閾值由replica.lag.time.max.ms參數(shù)設(shè)定。Leader發(fā)生故障之后,就會(huì)從ISR中選舉新的leader。
3. ack應(yīng)答機(jī)制
對(duì)于某些不太重要的數(shù)據(jù),對(duì)數(shù)據(jù)的可靠性要求不是很高,能夠容忍數(shù)據(jù)的少量丟失,所以沒(méi)必要等ISR中的follower全部接收成功。
所以Kafka為用戶提供了三種可靠性級(jí)別,用戶根據(jù)對(duì)可靠性和延遲的要求進(jìn)行權(quán)衡,選擇以下的配置。
acks參數(shù)配置:
acks:
0:producer不等待broker的ack,這一操作提供了一個(gè)最低的延遲,broker一接收到還沒(méi)有寫(xiě)入磁盤(pán)就已經(jīng)返回,當(dāng)broker故障時(shí)有可能丟失數(shù)據(jù);
1:producer等待broker的ack,partition的leader落盤(pán)成功后返回ack,如果在follower同步成功之前l(fā)eader故障,那么將會(huì)丟失數(shù)據(jù);
下圖為acks=1 數(shù)據(jù)丟失案例:
-1(all):producer等待broker的ack,partition的leader和follower全部落盤(pán)成功后才返回ack。但是如果在follower同步完成后,broker發(fā)送ack之前,leader發(fā)生故障,那么會(huì)造成數(shù)據(jù)重復(fù)。
下圖為acks=1 數(shù)據(jù)重復(fù)案例:
4. 故障處理細(xì)節(jié)
1. follower故障
follower發(fā)生故障后會(huì)被臨時(shí)踢出ISR,待該follower恢復(fù)后,follower會(huì)讀取本地磁盤(pán)記錄的上次的HW,并將log文件高于HW的部分截取掉,從HW開(kāi)始向leader進(jìn)行同步。等該follower的LEO大于等于該P(yáng)artition的HW,即follower追上leader之后,就可以重新加入ISR了。
2. leader故障
leader發(fā)生故障之后,會(huì)從ISR中選出一個(gè)新的leader,之后,為保證多個(gè)副本之間的數(shù)據(jù)一致性,其余的follower會(huì)先將各自的log文件高于HW的部分截掉,然后從新的leader同步數(shù)據(jù)。
注意:這只能保證副本之間的數(shù)據(jù)一致性,并不能保證數(shù)據(jù)不丟失或者不重復(fù)。
本次的分享就到這里了,
看 完 就 贊 , 養(yǎng) 成 習(xí) 慣 ! ! ! \color{#FF0000}{看完就贊,養(yǎng)成習(xí)慣?。?!} 看完就贊,養(yǎng)成習(xí)慣?。?!^ _ ^ ?? ?? ??
碼字不易,大家的支持就是我堅(jiān)持下去的動(dòng)力。后不要忘了關(guān)注我哦!
Kafka
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。