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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、道嗎?簡單架構如下 詳細如下 K架構 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的隊列。Partition中的每條消息都會被分配一個有 序的id (OffSet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論