32道常見的Kafka面試題及答案_第1頁
32道常見的Kafka面試題及答案_第2頁
32道常見的Kafka面試題及答案_第3頁
32道常見的Kafka面試題及答案_第4頁
32道常見的Kafka面試題及答案_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1、Kafka都有哪些特點(diǎn)? 高呑吐量、低延遲:kafka每秒可以處理兒十萬條消息,它的延遲最低只聲 兒毫 秒,每個(gè) topic 可以分多個(gè) Partition, COnSIImer group 對 Partition 進(jìn)行 COnSUme 操作。 可擴(kuò)展性:kafka集群支持熱擴(kuò)展 持久性、可幕性:消息被持久化到本地磁盤,并且支持?jǐn)?shù)據(jù)備份防止數(shù)據(jù)丟 容錯(cuò)性:允許集群中節(jié)點(diǎn)失敗(若副本數(shù)量為I),則允許n-l個(gè)節(jié)點(diǎn)失?。?高并發(fā):支持?jǐn)?shù)千個(gè)客戶端同時(shí)讀寫 2、請簡述下你在哪些場景下會選擇Kafka? 日志收集:一個(gè)公司可以用Kafka可以收集各種服務(wù)的log,通過kafka以統(tǒng)一接 口服務(wù)的方

2、式開放給各種COnSUmer,例如hadoop HBaSe SOIt等。 消息系統(tǒng):解耦和生產(chǎn)者和消費(fèi)者、緩存消息等。 用戶活動(dòng)跟蹤:Kafka經(jīng)常被用來記錄Web用戶或者app用戶的各種活動(dòng),如瀏覽 網(wǎng)頁、搜索、點(diǎn)擊等活動(dòng),這些活動(dòng)信息被各個(gè)服務(wù)器發(fā)布到kafka的topic 中,然后訂閱者通過訂閱這些topic來做實(shí)時(shí)的監(jiān)控分析,或者裝載 到hadoop 數(shù)據(jù)倉庫中做離線分析和挖掃。 運(yùn)營指標(biāo):KJfka也經(jīng)常用來記錄運(yùn)營監(jiān)控?cái)?shù)據(jù)。包括收集各種分布式應(yīng)用的數(shù) 據(jù),生產(chǎn)各種操作的集中反饋,比如報(bào)警和報(bào)告。 流式處理:比如SPark Streaming和Flink 3、Kafka的設(shè)計(jì)架構(gòu)你知

3、道嗎?簡單架構(gòu)如下 詳細(xì)如下 K架構(gòu) KafkaJWli 鵰 Kafka Cluster 消赭消艮緞 TOPiCA 堺8野寵 message to A-01 Leader ProdUC message RePIiCat)OnA i 0 Follower message RrOAIC BrOke “T TOPiCA Partition TopicA TOPiC Partition 0 A Leader Partib messa, ge ZOoke Follows .ET亠 1 - Broker2 COnSUme me的隊(duì)列。Partition中的每條消息都會被分配一個(gè)有 序的id (OffSet

4、) o將消息發(fā)給COnSUmer, kafka只保證按一個(gè)Partition中的 消息的順序,不保證一個(gè)topic的整體(多個(gè)Partition間)的順序。 -OffSg kafka的存儲文件都是按照Offset, kafka來命名,用OffSet做名字的好處 是方便查找。例如你想找位于2049的位置,只要找到2048. kafka的文 件即可。 當(dāng)然 the first OffSet 就是 00000000000. kafkao 4、Kafka分區(qū)的目的? 分區(qū)對于K吐畑集群的好處是:實(shí)現(xiàn)負(fù)載均衡。分區(qū)對于消費(fèi)者來說,可 以提咼并發(fā)度,提咼效率。 5、你知道Kafka是如何做到消息的有序性?

5、 kafka中的每個(gè)Partition中的消息在寫入時(shí)都是有丿了;的,而且單獨(dú)一個(gè) Partition只能由一個(gè)消費(fèi)者去消費(fèi),可以在里面保證消息的順序性。但是 分區(qū) 之間的消息是不保證有序的。 6、Kafka的高可幕性是怎么實(shí)現(xiàn)的?數(shù)據(jù)可靠性 Kafka作為一個(gè)商業(yè)級消息中間件,消息可靠性的重要性可想而知。本 文從 PrOdUCter往BrOket發(fā)送消息、TOPIC分區(qū)副本以及Leader選舉 兒個(gè)角度介紹數(shù) 據(jù)的可靠企 TOPiC分區(qū)副本 在KafkaO. 8. 0之前,Kafka是沒有副本的概念的,那時(shí)候人們只會用Kafka 存儲一些不重要的數(shù)據(jù),因?yàn)闆]有副本,數(shù)據(jù)很可能會丟失。但是隨著

6、業(yè)務(wù)的 發(fā)展,支持副本的功能越來越強(qiáng)烈,所以為了保證數(shù)據(jù)的可靠性,Kafka從 0.8.0版本開始引入了分區(qū)副本(詳情請參見KAFKA-50)。也就 是說每個(gè)分區(qū)可 以人為的配置兒個(gè)副本(比女口創(chuàng)建主題的時(shí)候指 定replication-factor,也可以在 BrOker 級別進(jìn)行配置 default, replication, factor), 一般會設(shè)置為 3。 Kafka可以保證單個(gè)分區(qū)里的事件是有序的,分區(qū)可以在線(可用),也可 以離線(不可用)。在眾多的分區(qū)副本里面有一個(gè)副本是Leader,其余的副本是 follower,所有的讀寫操作都是經(jīng)過Leader進(jìn)行的,同時(shí)followe

7、r會定期地去 leader上的復(fù)制數(shù)據(jù)。當(dāng)Leader掛了的時(shí)候,其中一個(gè)follower會重新成為新 的LeaderO通過分區(qū)副本,引入了數(shù)據(jù)冗余,同時(shí)也提供了 Kafke的數(shù)據(jù)可鼎 性。 Kafka的分區(qū)多副本架構(gòu)是Kafka可壽性保證的核心,把消息寫入多個(gè) 副本 可以使Kafka在發(fā)生崩潰時(shí)仍能保證消息的持久性。 7、請談一談Kafka數(shù)據(jù)一致性原理一致性就是說不論是老的Leader還是新 選舉 的Leader, COnSUmer都能讀到一樣的數(shù)據(jù)。 假設(shè)分區(qū)的副本為3,其中副本0是Leader,副本1和副本2是follower,并且在ISR列 表里面。雖然副本0已經(jīng)寫入了 MeSSag

8、e4,但是COnSUmer只能讀取到MeSSage2o因?yàn)?所有的ISR都同步f MeSSage2,只有High Water Mark以上的消息才支持COnSUmer讀 取,而 High Water Mark 取 決于ISR列表里面偏移量最小的分區(qū),對應(yīng)于上圖的副本2,這個(gè)很類似于木桶原 理。 這樣做的原因是還沒有被足夠多副本復(fù)制的消息被認(rèn)為是“不安全”的, 如果Leader發(fā)生崩潰,另一個(gè)副本成為新Leader, 么這些消息很可能丟 失了。 如果我們允許消費(fèi)者讀取這些消息,可能就會破壞一致性。試想,一個(gè)消費(fèi)者 從當(dāng)前Leader (副本0)讀取并處理了 IVleSSage4,這個(gè)時(shí)候Lead

9、er掛掉了,選舉 了副本1為新的Leader,這時(shí)候另一個(gè)消費(fèi)者再去從新的Leader讀取消息,發(fā)現(xiàn) 這個(gè)消息其實(shí)并不存在,這就導(dǎo)致了數(shù)據(jù)不一致性問題。 當(dāng)然,引入了 High Water Mark機(jī)制,會導(dǎo)致BrOker間的消息復(fù)制因?yàn)?某些 原因變慢,那么消息到達(dá)消費(fèi)者的時(shí)間也會隨之變長(因?yàn)槲覀儠鹊?待消息復(fù) 制完畢)。延遲時(shí)間可以通過參數(shù)replica, lag. time. max. ms參數(shù)配 置,它指定了 副本在復(fù)制消息時(shí)可被允許的最大延遲時(shí)間。 8、ISR、OSR、AR 是什么? ISR: In-SynC RePliCaS 副本同步隊(duì)列 OSR: OUt-0廠-Sync Re

10、PliCaS AR: ASSigned RePliCaS 所有副本 ISR是由leader維護(hù),follower從leader同步數(shù)據(jù)有一些延遲(具體可以參 見圖 文了解Kef屆的副本復(fù)制機(jī)制),超過相應(yīng)的閾值會把follower剔除出ISR,存入 OSR (OUt-Of-SynC RePliCaS )列表,新加入的follower也會先存 放在OSR中。 AR=ISR+OSRo 9、LEO、HW、LSOS LW等分別代表什么 LEO:是LOgEndaffSet的簡稱,代表當(dāng)前日志文件中下一條 HW:水位或水印(Watermark)詞,也可稱為I島水位(high Watermark), 常被

11、用在流式處理領(lǐng)域(比如lApnche Flink APaChe SPark等),以表征元素或事件在 基于時(shí)間層面上的進(jìn)度。在Kef肋中,水位的概念反而與時(shí)間無關(guān),而是與位置 信息相關(guān)。嚴(yán)格來說,它表示的就是位置信息,即位移 (OffSet) o取Partition對應(yīng)的ISR中 最小的LEO作為HW, COnSUmer最 多只 能消費(fèi)到HW所在的位置上一條信息。 LSO:是LaStStableOffSet的簡稱,對未完成的事務(wù)而言,LSO的值等于事 務(wù)中第 一條消息的位置(HrstUnstableOffset),對已完成的事務(wù)而言,它的值 同HW相同 LW: LOW Watermark低水位,

12、代表AR集合中最小的IOgStattOffSet值。 10、Kafka在什么悄況下會出現(xiàn)消息丟失? 11怎么盡可能保證Kafka的可靠性 12、消費(fèi)者和消費(fèi)者組有什么關(guān)系?每個(gè)消費(fèi)者從屬于消費(fèi)組。具體關(guān)系如下: Kafka Cluster Server 1 1Server 2i C1 C2C3 C4 C5 C6 13、Kafka的每個(gè)分區(qū)只能被一個(gè)消費(fèi)者線程,如何做到多個(gè)線程同時(shí)消費(fèi)一個(gè) 分區(qū)? 14、數(shù)據(jù)傳輸?shù)氖聞?wù)有兒種? 數(shù)據(jù)傳輸?shù)氖聞?wù)定義通常有以下三種級別: (1)最多一次:消息不會被重復(fù)發(fā)送,最多被傳輸一次,但也有可能一次不 傳輸 (2)最少一次:消息不會被漏發(fā)送,最少被傳輸一次,但也

13、有可能被重復(fù)傳 輸. (3)精確的一次(EXdCtlyonCe):不會漏傳輸也不會重復(fù)傳輸,每個(gè)消息都傳 輸被 15、Kafka消費(fèi)者是否可以消費(fèi)指定分區(qū)消息? Kafa COnSUmer消費(fèi)消息時(shí),向broker發(fā)!1; fetch請求去消費(fèi)特定分區(qū)的消 息,COnSUmer指定消息在日志中的偏移量(OffSet),就可以消費(fèi)從這個(gè) 位置開始 的消息,CUStOmer擁有了 OffSet的控制權(quán),可以向后回滾去重新消 費(fèi)之前的消 息,這是很有意義的。 16、Kafka消息是采用PUII模式,還是PllSh模式? Kafka最初考慮的問題是,CUStOmer應(yīng)該從brokes拉取消息還是bro

14、kers將 消息推送到COnSUmer,也就是Pull還PUShO在這方面,Kafka遵循了一種 大部分消 息系統(tǒng)共同的傳統(tǒng)的設(shè)計(jì):PrOdUCer將消息推送到broker, COnSUmer從broker拉 取消息。 一些消息系統(tǒng)比如SCribe和APaChe FlUme釆用了 PUSh模式,將消息推 送到 卜游的COnSUmerO這樣做有好處也有壞處:l_L| broker決定消息推送的速 率,對于 不同消費(fèi)速率的ConSUmer就不太好處理了。消息系統(tǒng)都致力于讓ConSUmer以最 大的速率最快速的消費(fèi)消息,但不幸的是,PUSh模式下,當(dāng)broker推送的速率 遠(yuǎn)大于COnSumer消費(fèi)

15、的速率時(shí),COnSUmer恐怕就要崩潰TO最終Kafka還是選取了 傳統(tǒng)的Pull模式。PU11模式的另外一個(gè)好處是COnSumer可以自主決定是否批量 的從broker拉取數(shù)據(jù)。PllSh模式必須在不 知道下游COnSUmer消費(fèi)能力和消費(fèi)策 略的情況下決定是立即推送每條消息還 是緩存之后批量推送。如果為了避免 COnSUmer崩潰而釆用較低的推送速率,將可能導(dǎo)致一次只推送較少的消息而造 成浪費(fèi)。PU11模式下,COnSUer就可 以根據(jù)自己的消費(fèi)能力去決定這些策略。 PU11有個(gè)缺點(diǎn)是,如果broker沒有 可供消費(fèi)的消息,將導(dǎo)致COnSUmer不斷在循 環(huán)中輪詢,直到新消息到t達(dá)。為了避

16、免這點(diǎn),Kafka有個(gè)參數(shù)可以讓COnSUmer 阻塞知道新消息到達(dá)(當(dāng)然也可以阻塞知道消息的數(shù)量達(dá)到某個(gè)特定的量這樣 就可以批量發(fā) 17、Kafka消息格式的演變清楚嗎? 18、Kafka偏移量的演變清楚嗎? 19、Kafka高效文件存儲設(shè)計(jì)特點(diǎn) Kafka把topic中一個(gè)ParitiOn大文件分成多個(gè)小文件段,通過多個(gè)小文件段,就 容易定期清除或刪除已經(jīng)消費(fèi)完文件,減少磁盤占用。 通過索引信息可以快速定位message和確定response的最大大小。 通過index元數(shù)據(jù)全部映射到memory,可以避免Segment file的10磁盤操 作。 通過索引文件稀疏存儲,可以大幅降低ind

17、ex文件元數(shù)據(jù)占用空間大小 20、Kafka創(chuàng)建TOPIC時(shí)如何將分區(qū)放置到不同的BrOker中 副本因子不能大于BrOker的個(gè)數(shù); 第一個(gè)分區(qū)(編號為0)的第一個(gè)副本放置位置是隨機(jī)從brokerList選擇的;其他 分區(qū)的第一個(gè)副本放置位置相對于第0個(gè)分區(qū)依次往后移。也就是如果 我們有5個(gè)Broker, 5個(gè)分區(qū),假設(shè)第一個(gè)分區(qū)放在第四個(gè)BrOker 土,那么 第二 個(gè)分區(qū)將會放在第五個(gè)BrOker ;笫三個(gè)分區(qū)將會放在第一個(gè)BrOker上;第四 個(gè)分區(qū)將會放在第二個(gè)BrOker ,依次類推; 剩余的副本相對于第一個(gè)副本放置位置其實(shí)是山IiextRepIicaShift決定的,而這 個(gè)數(shù)也

18、是隨機(jī)產(chǎn)生的 21、Kafka新建的分區(qū)會在哪個(gè)L1錄下創(chuàng)建 在啟動(dòng)Kafka集群之前,我們需要配置好log. dirs參數(shù),其值是Kafka數(shù)據(jù) 的存放叮錄,這個(gè)參數(shù)可以配置多個(gè)H錄,錄之間使用逗號分隔,通 常這些 目錄是分布在不同的磁盤上用于提高讀寫性能。 當(dāng)然我們也可以配置log. dir參數(shù),含義一樣。只需要設(shè)置其中一個(gè)即可。 如果log. dirs參數(shù)只配置了一個(gè)目錄,那么分配到各個(gè)BrOker 土的分區(qū)肯 定只能在這個(gè)目錄下創(chuàng)建文件夾用于存放數(shù)據(jù)。 但是如果log. dirs參數(shù)配置了多個(gè)目錄,那么Kdfka會在哪個(gè)文件夾中創(chuàng) 建分區(qū)叮錄呢?答案是:Kafka會在含有分區(qū)IJ錄最少

19、的文件夾中創(chuàng)建新的分 區(qū)目錄,分區(qū)目錄名為ToPiC名+分區(qū)ID。注意,是分區(qū)文件夾總數(shù)最 少的口 錄,而不是磁盤使用量最少的IJ錄!也就是說,如果你給log. dirs參數(shù)新增了 一個(gè)新的磁盤,新的分區(qū)Izl錄肯定是先在這個(gè)新的磁盤上創(chuàng)建直到 這個(gè)新的 磁盤H錄擁有的分區(qū)H錄不是最少為止。 22、談一談Kafka的再均衡 在Kaf肋中,當(dāng)有新消費(fèi)者加入或者訂閱的topic數(shù)發(fā)生變化時(shí),會觸發(fā) Rebalance (再均衡:在同一個(gè)消費(fèi)者組當(dāng)中,分區(qū)的所有權(quán)從一個(gè)消費(fèi)者轉(zhuǎn)移 到另外一個(gè)消費(fèi)者)機(jī)制,Rebalance顧名思義就是重新均衡消費(fèi)者消費(fèi)。 Rebalance的過程如下: 第一步:所有

20、成員都向Coordinator發(fā)送請求,請求入組。一旦所有成員 都 發(fā)送了請求,COOrdinatOr會從中選擇一個(gè)COnSUmer擔(dān)任leader的角色,并把組 成員信息以及訂閱信息發(fā)給IeaderO 第二步:Ieaderff始分配消費(fèi)方案,指明具體哪個(gè)COnSUmer負(fù)責(zé)消費(fèi)哪 些 topic的哪些PartitiOnO 一旦完成分配,leader會將這個(gè)方案發(fā)給COOrdinatOro COOrdinatOr接收到分配方案之后會把方案發(fā)給各個(gè)COnSUmer,這樣組內(nèi)的所有成 員就都知道自己應(yīng)該消費(fèi)哪些分區(qū)。所以對于Rebalance來說,COOrdinatOr起 著至關(guān)重要的作用 23、談?wù)凨afka分區(qū)分配策略 24、Kafka ProdUCer是如何動(dòng)態(tài)感知主題分區(qū)數(shù)變化的? 25、Kafka是如何實(shí)現(xiàn)高呑吐率的? Kafka是分布式消息系統(tǒng),需要處理海量的消息,Kafka的設(shè)計(jì)是把所有 的 消息都寫入速度低容量大的硬盤,以此來換取更強(qiáng)的存儲能力,但實(shí)際上,使用 硬盤并沒有帶來過多的性能損失。kafla主要使用了以下兒個(gè)方式實(shí)現(xiàn)了超高 的吞吐率: 順序讀寫; 零拷貝 文件分段 批量發(fā)送 數(shù)據(jù)壓縮。 27、如何為Kafka集群選擇合適的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論