目錄
問題解答
面試點(diǎn)評(píng)
問題解答
(如圖)kafka是一個(gè)用來實(shí)現(xiàn)異步消息通信的中間件,它的整個(gè)架構(gòu)由Producer、Consumer、Broker組成。
所以,對(duì)于kafka如何保證消息不丟失這個(gè)問題,可以從三個(gè)方面來考慮和實(shí)現(xiàn):
首先是Producer端,需要確保消息能夠到達(dá)Broker并實(shí)現(xiàn)消息存儲(chǔ),在這個(gè)層面,有可能出現(xiàn)網(wǎng)絡(luò)問題,導(dǎo)致消息發(fā)送失敗,所以,針對(duì)Producer端,可以通過2種方式來避免消息丟失:
1. ??Producer默認(rèn)是異步發(fā)送消息,這種情況下要確保消息發(fā)送成功,有兩個(gè)方法:
a.把異步發(fā)送改成同步發(fā)送,這樣producer就能實(shí)時(shí)知道消息發(fā)送的結(jié)果。
b.添加異步回調(diào)函數(shù)來監(jiān)聽消息發(fā)送的結(jié)果,如果發(fā)送失敗,可以在回調(diào)中重試。
2. ??Producer本身提供了一個(gè)重試參數(shù)retries,如果因?yàn)榫W(wǎng)絡(luò)問題或者Broker故障導(dǎo)致發(fā)送失敗,Producer會(huì)自動(dòng)重試。
然后是Broker端,Broker需要確保Producer發(fā)送過來的消息不會(huì)丟失,也就是只需要把消息持久化到磁盤就可以了。
(如圖)但是,Kafka為了提升性能,采用了異步批量刷盤的實(shí)現(xiàn)機(jī)制,也就是說按照一定的消息量和時(shí)間間隔來刷盤,而最終刷新到磁盤的這個(gè)動(dòng)作,是由操作系統(tǒng)來調(diào)度的,所以如果在刷盤之前系統(tǒng)崩潰,就會(huì)導(dǎo)致數(shù)據(jù)丟失。
(如圖)Kafka并沒有提供同步刷盤的實(shí)現(xiàn),所以針對(duì)這個(gè)問題,需要通過Partition的副本機(jī)制和acks機(jī)制來一起解決。
“我簡(jiǎn)單說一下Partition副本機(jī)制,它是針對(duì)每個(gè)數(shù)據(jù)分區(qū)的高可用策略,每個(gè)partition副本集包含唯一的一個(gè)Leader和多個(gè)Follower,Leader專門處理事務(wù)類的請(qǐng)求,F(xiàn)ollower負(fù)責(zé)同步Leader的數(shù)據(jù)”。
在這樣的一種機(jī)制的基礎(chǔ)上,kafka提供了一個(gè)acks的參數(shù),Producer可以設(shè)置acks參數(shù)再結(jié)合Broker的副本機(jī)制來個(gè)共同保障數(shù)據(jù)的可靠性。
acks有幾個(gè)值的選擇:
1. ??acks=0,表示producer不需要等Broker的響應(yīng),就認(rèn)為消息發(fā)送成功,這種情況會(huì)存在消息丟失。
2. ??acks=1,表示Broker中的Leader Partition收到消息以后,不等待其他Follower?Partition同步完,就給Producer返回確認(rèn),這種情況下Leader Partition掛了,會(huì)存在數(shù)據(jù)丟失。
3. ??acks=-1,表示Broker中的Leader?Partition收到消息后,并且等待ISR列表中的follower同步完成,再給Producer返回確認(rèn),這個(gè)配置可以保證數(shù)據(jù)的可靠性。
最后,就是Consumer必須要能消費(fèi)到這個(gè)消息,實(shí)際上,只要producer和broker的消息可靠的到了保障,那么消費(fèi)端是不太可能出現(xiàn)消息無法消費(fèi)的問題,除非是Consumer沒有消費(fèi)完這個(gè)消息就直接提交了,但是即便是這個(gè)情況,也可以通過調(diào)整offset的值來重新消費(fèi)。
面試點(diǎn)評(píng)
從高手的回答可以發(fā)現(xiàn),任何的技術(shù)問題,是可以按照請(qǐng)求的順序,或者調(diào)用關(guān)系來逐層推導(dǎo)去回答的。
當(dāng)然,技術(shù)的底子要足夠厚,至少像kafka里面這些副本、數(shù)據(jù)同步、分區(qū)、刷盤等功能,至少都要有深度的思考和研究。文章來源:http://www.zghlxwxcb.cn/news/detail-790299.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-790299.html
到了這里,關(guān)于一線大廠面試真題-Kafka如何保證消息不丟失的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!