本文為您盤(pán)點(diǎn)了14個(gè)最常見(jiàn)的Kafka面試題,同時(shí)也是對(duì)Apache Kafka初學(xué)者必備知識(shí)點(diǎn)的一個(gè)整理與介紹。
1、請(qǐng)說(shuō)明什么是Apache Kafka?
Apache Kafka是由Apache開(kāi)發(fā)的一種發(fā)布訂閱消息系統(tǒng),它是一個(gè)分布式的、分區(qū)的和重復(fù)的日志服務(wù)。
2、請(qǐng)說(shuō)明什么是傳統(tǒng)的消息傳遞方法?
傳統(tǒng)的消息傳遞方法包括兩種:
·排隊(duì):在隊(duì)列中,一組用戶可以從服務(wù)器中讀取消息,每條消息都發(fā)送給其中一個(gè)人。
·發(fā)布-訂閱:在這個(gè)模型中,消息被廣播給所有的用戶。
3、請(qǐng)說(shuō)明Kafka相對(duì)傳統(tǒng)技術(shù)有什么優(yōu)勢(shì)?
Apache Kafka與傳統(tǒng)的消息傳遞技術(shù)相比優(yōu)勢(shì)之處在于:
快速:單一的Kafka代理可以處理成千上萬(wàn)的客戶端,每秒處理數(shù)兆字節(jié)的讀寫(xiě)操作。
可伸縮:在一組機(jī)器上對(duì)數(shù)據(jù)進(jìn)行分區(qū)和簡(jiǎn)化,以支持更大的數(shù)據(jù)
持久:消息是持久性的,并在集群中進(jìn)行復(fù)制,以防止數(shù)據(jù)丟失。
設(shè)計(jì):它提供了容錯(cuò)保證和持久性
4、在Kafka中broker的意義是什么?
在Kafka集群中,broker術(shù)語(yǔ)用于引用服務(wù)器。
5、Kafka服務(wù)器能接收到的最大信息是多少?
Kafka服務(wù)器可以接收到的消息的最大大小是1000000字節(jié)。
6、解釋Kafka的Zookeeper是什么?我們可以在沒(méi)有Zookeeper的情況下使用Kafka嗎?
Zookeeper是一個(gè)開(kāi)放源碼的、高性能的協(xié)調(diào)服務(wù),它用于Kafka的分布式應(yīng)用。
不,不可能越過(guò)Zookeeper,直接聯(lián)系Kafka broker。一旦Zookeeper停止工作,它就不能服務(wù)客戶端請(qǐng)求。
·Zookeeper主要用于在集群中不同節(jié)點(diǎn)之間進(jìn)行通信
·在Kafka中,它被用于提交偏移量,因此如果節(jié)點(diǎn)在任何情況下都失敗了,它都可以從之前提交的偏移量中獲取
·除此之外,它還執(zhí)行其他活動(dòng),如: leader檢測(cè)、分布式同步、配置管理、識(shí)別新節(jié)點(diǎn)何時(shí)離開(kāi)或連接、集群、節(jié)點(diǎn)實(shí)時(shí)狀態(tài)等等。
7、解釋Kafka的用戶如何消費(fèi)信息?
在Kafka中傳遞消息是通過(guò)使用sendfile API完成的。它支持將字節(jié)從套接口轉(zhuǎn)移到磁盤(pán),通過(guò)內(nèi)核空間保存副本,并在內(nèi)核用戶之間調(diào)用內(nèi)核。
8、解釋如何提高遠(yuǎn)程用戶的吞吐量?
如果用戶位于與broker不同的數(shù)據(jù)中心,則可能需要調(diào)優(yōu)套接口緩沖區(qū)大小,以對(duì)長(zhǎng)網(wǎng)絡(luò)延遲進(jìn)行攤銷。
9、解釋一下,在數(shù)據(jù)制作過(guò)程中,你如何能從Kafka得到準(zhǔn)確的信息?
在數(shù)據(jù)中,為了精確地獲得Kafka的消息,你必須遵循兩件事: 在數(shù)據(jù)消耗期間避免重復(fù),在數(shù)據(jù)生產(chǎn)過(guò)程中避免重復(fù)。
這里有兩種方法,可以在數(shù)據(jù)生成時(shí)準(zhǔn)確地獲得一個(gè)語(yǔ)義:
·每個(gè)分區(qū)使用一個(gè)單獨(dú)的寫(xiě)入器,每當(dāng)你發(fā)現(xiàn)一個(gè)網(wǎng)絡(luò)錯(cuò)誤,檢查該分區(qū)中的最后一條消息,以查看您的最后一次寫(xiě)入是否成功
·在消息中包含一個(gè)主鍵(UUID或其他),并在用戶中進(jìn)行反復(fù)制
10、解釋如何減少I(mǎi)SR中的擾動(dòng)?broker什么時(shí)候離開(kāi)ISR?
ISR是一組與leaders完全同步的消息副本,也就是說(shuō)ISR中包含了所有提交的消息。ISR應(yīng)該總是包含所有的副本,直到出現(xiàn)真正的故障。如果一個(gè)副本從leader中脫離出來(lái),將會(huì)從ISR中刪除。
11、Kafka為什么需要復(fù)制?
Kafka的信息復(fù)制確保了任何已發(fā)布的消息不會(huì)丟失,并且可以在機(jī)器錯(cuò)誤、程序錯(cuò)誤或更常見(jiàn)些的軟件升級(jí)中使用。
12、如果副本在ISR中停留了很長(zhǎng)時(shí)間表明什么?
如果一個(gè)副本在ISR中保留了很長(zhǎng)一段時(shí)間,那么它就表明,跟蹤器無(wú)法像在leader收集數(shù)據(jù)那樣快速地獲取數(shù)據(jù)。
13、請(qǐng)說(shuō)明如果首選的副本不在ISR中會(huì)發(fā)生什么?
如果首選的副本不在ISR中,控制器將無(wú)法將leadership轉(zhuǎn)移到首選的副本。
14、有可能在生產(chǎn)后發(fā)生消息偏移嗎?
在大多數(shù)隊(duì)列系統(tǒng)中,作為生產(chǎn)者的類無(wú)法做到這一點(diǎn),它的作用是觸發(fā)并忘記消息。broker將完成剩下的工作,比如使用id進(jìn)行適當(dāng)?shù)脑獢?shù)據(jù)處理、偏移量等。
作為消息的用戶,你可以從Kafka broker中獲得補(bǔ)償。如果你注視SimpleConsumer類,你會(huì)注意到它會(huì)獲取包括偏移量作為列表的MultiFetchResponse對(duì)象。此外,當(dāng)你對(duì)Kafka消息進(jìn)行迭代時(shí),你會(huì)擁有包括偏移量和消息發(fā)送的MessageAndOffset對(duì)象。