本文及其他文章僅為學(xué)習(xí)筆記俯在,本文轉(zhuǎn)自http://www.kafka.cc/category/interview2/
1. kafka主要特征
? ? kafka具有近乎實時性的消息處理能力寒锚,面對海量數(shù)據(jù)淆九,高效的存儲消息和查詢消息吩案。kafka將消息保存在磁盤中锥忿,以順序讀寫的方式訪問磁盤患民,從而避免了隨機(jī)讀寫磁盤導(dǎo)致的性能瓶頸
? ? kafka支持批量讀寫消息录粱,并且對消息批量壓縮掘剪,提高了網(wǎng)絡(luò)利用率和壓縮效率
? ? kafka支持消息分區(qū)平委,每個分區(qū)中的消息保證順序傳輸,而分區(qū)之間可以并發(fā)操作夺谁,提高了kafka的并發(fā)能力
? ? kafka支持在線增加分區(qū)廉赔,支持在線水平擴(kuò)展
? ? kafka支持為每個分區(qū)創(chuàng)建多個副本,其中只會有一個leader副本負(fù)責(zé)讀寫匾鸥,其他副本只負(fù)責(zé)與leader副本同步蜡塌,這種方式提高了數(shù)據(jù)的容災(zāi)能力,kafka會將leader副本均勻的分布在集群中的服務(wù)器上扫腺,實現(xiàn)性能最大化
2. 列舉kafka的應(yīng)用場景
3. kafka主題分區(qū)的作用
? ? kafka的每個topic都可以分為多個partition岗照,每個partition都有多個replica(副本),每個分區(qū)中的消息是不同的,提高了并發(fā)讀寫的能力攒至,而同一分區(qū)的不同副本中保存的是相同的消息厚者,副本之間是一主多從關(guān)系,其中l(wèi)eader副本處理讀寫請求迫吐,follower副本只與leader副本進(jìn)行消息同步库菲,當(dāng)leader副本出現(xiàn)故障時,則從follower副本中重新選舉leader副本對外提供服務(wù)志膀。這樣熙宇,通過提高分區(qū)的數(shù)量,就可以實現(xiàn)水平擴(kuò)展溉浙,通過提高副本數(shù)量烫止,就可以提高容災(zāi)能力
4. consumer水平擴(kuò)展如何實現(xiàn)
? ? kafka支持consumer水平擴(kuò)展,可以讓多個consumer加入一個consumer group戳稽,在一個consumer group中馆蠕,每個分區(qū)只能分配給一個consumer,當(dāng)kafka服務(wù)端增加分區(qū)數(shù)量進(jìn)行水平擴(kuò)展后惊奇,可以向consumer group中增加新的consumer來提高整個consumer group的消費能力互躬,當(dāng)consumer group 中的一個consumer出現(xiàn)故障下線時,會通過rebalance操作下線consumer颂郎,它負(fù)責(zé)處理的分區(qū)將分配給其他consumer吼渡。。乓序。
5. 消息的順序
? ? kafka保證一個partition內(nèi)消息是有序的寺酪,但是并不保證多個partition之間的數(shù)據(jù)有順序,每個topic可以劃分成多個分區(qū)替劈,同一個topic下的不同分區(qū)包含的消息是不同的房维,每個消息在被添加到分區(qū)時,都會被分配一個offset抬纸,它是此消息在分區(qū)中的唯一編號,kafka通過offset保證消息在分區(qū)內(nèi)的順序耿戚,offset順序不跨分區(qū)湿故,即kafka只保證在同一個分區(qū)內(nèi)的消息是有序的
6. 為了避免磁盤被占滿,kafka會周期性的刪除陳舊的消息膜蛔,刪除策略是什么
? ? 一種是根據(jù)消息保留的時間
? ? 一種是根據(jù)topic存儲的數(shù)據(jù)大小
7. 什么是日志壓縮
? ? 在很多場景中坛猪,消息的key與value之間的對應(yīng)關(guān)系是不斷變化的,消費者只關(guān)心key對應(yīng)的最新value皂股,此時墅茉,可以開啟kafka的日志壓縮功能,kafka會在后臺啟動一個線程,定期將相同key的消息進(jìn)行合并就斤,只保留最新的value值
8. 什么是broker悍募?作用是什么?
? ? 一個單獨的kafka server就是一個broker,broker主要工作就是接收生產(chǎn)者發(fā)過來的消息洋机,分配offset坠宴,之后保存到磁盤中。同時绷旗,接收消費者喜鼓、其他broker的請求,根據(jù)請求類型進(jìn)行相應(yīng)的處理并返回響應(yīng)衔肢,在一般的生產(chǎn)環(huán)境中庄岖,一個broker獨占一臺物理服務(wù)器
9. 同一分區(qū)的多個副本包括的消息是否一致?
? ? 每個副本中包含的消息是一樣的角骤,但是再同一時刻隅忿,副本之間并不是完全一樣的
10. ISR集合是什么?誰維護(hù)著启搂?如何維護(hù)硼控?
? ? ISR(In-Sync Replica)集合表示的是目前可用并且消息量與leader相差不多的副本集合,這是整個副本集合的一個子集
? ? ISR集合的副本必須滿足:副本所在節(jié)點必須維持著與zookeeper的連接胳赌;副本最后一條消息的offset與leader副本最后一條消息的offset之間的差值不能超出指定的閾值
? ? 每個分區(qū)的leader副本都會維護(hù)此分區(qū)的ISR集合牢撼,寫請求首先由leader副本處理,之后follower副本會從leader副本上拉取寫入的消息疑苫,這個過程會有一定的延遲熏版,導(dǎo)致follower副本中保存的消息略少于leader副本,只要未超出閾值都是可以容忍的