一、請說明什麼是Apache Kafka?面試
Apache Kafka是由Apache開發的一種發佈訂閱消息系統,它是一個分佈式的、分區的和可複製的提交日誌服務。數組
二、說說Kafka的使用場景?緩存
①異步處理服務器
②應用解耦網絡
③流量削峯負載均衡
④日誌處理異步
⑤消息通信等。分佈式
三、使用Kafka有什麼優勢和缺點?性能
優勢:fetch
①支持跨數據中心的消息複製;
②單機吞吐量:十萬級,最大的優勢,就是吞吐量高;
③topic數量都吞吐量的影響:topic從幾十個到幾百個的時候,吞吐量會大幅度降低。因此在同等機器下,kafka儘可能保證topic數量不要過多。若是要支撐大規模topic,須要增長更多的機器資源;
④時效性:ms級;
⑤可用性:很是高,kafka是分佈式的,一個數據多個副本,少數機器宕機,不會丟失數據,不會致使不可用;
⑥消息可靠性:通過參數優化配置,消息能夠作到0丟失;
⑦功能支持:功能較爲簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日誌採集被大規模使用。
缺點:
①因爲是批量發送,數據並不是真正的實時; 僅支持統一分區內消息有序,沒法實現全局消息有序;
②有可能消息重複消費;
③依賴zookeeper進行元數據管理,等等。
四、爲何說Kafka性能很好,體如今哪裏?
①順序讀寫
②零拷貝
③分區
④批量發送
⑤數據壓縮
五、請說明什麼是傳統的消息傳遞方法?
傳統的消息傳遞方法包括兩種:
排隊:在隊列中,一組用戶能夠從服務器中讀取消息,每條消息都發送給其中一我的。
發佈-訂閱:在這個模型中,消息被廣播給全部的用戶。
六、請說明Kafka相對傳統技術有什麼優點?
①快速:單一的Kafka代理能夠處理成千上萬的客戶端,每秒處理數兆字節的讀寫操做。
②可伸縮:在一組機器上對數據進行分區
③和簡化,以支持更大的數據
④持久:消息是持久性的,並在集羣中進
⑤行復制,以防止數據丟失。
⑥設計:它提供了容錯保證和持久性
七、解釋Kafka的Zookeeper是什麼?咱們能夠在沒有Zookeeper的狀況下使用Kafka嗎?
Zookeeper是一個開放源碼的、高性能的協調服務,它用於Kafka的分佈式應用。
不,不可能越過Zookeeper,直接聯繫Kafka broker。一旦Zookeeper中止工做,它就不能服務客戶端請求。
Zookeeper主要用於在集羣中不一樣節點之間進行通訊
在Kafka中,它被用於提交偏移量,所以若是節點在任何狀況下都失敗了,它均可以從以前提交的偏移量中獲取
除此以外,它還執行其餘活動,如: leader檢測、分佈式同步、配置管理、識別新節點什麼時候離開或鏈接、集羣、節點實時狀態等等。
八、解釋Kafka的用戶如何消費信息?
在Kafka中傳遞消息是經過使用sendfile API完成的。它支持將字節從套接口轉移到磁盤,經過內核空間保存副本,並在內核用戶之間調用內核。
九、解釋如何提升遠程用戶的吞吐量?
若是用戶位於與broker不一樣的數據中心,則可能須要調優套接口緩衝區大小,以對長網絡延遲進行攤銷。
十、解釋一下,在數據製做過程當中,你如何能從Kafka獲得準確的信息?
在數據中,爲了精確地得到Kafka的消息,你必須遵循兩件事: 在數據消耗期間避免重複,在數據生產過程當中避免重複。
這裏有兩種方法,能夠在數據生成時準確地得到一個語義:
每一個分區使用一個單獨的寫入器,每當你發現一個網絡錯誤,檢查該分區中的最後一條消息,以查看您的最後一次寫入是否成功
在消息中包含一個主鍵(UUID或其餘),並在用戶中進行反複製
十一、解釋如何減小ISR中的擾動?broker何時離開ISR?
ISR是一組與leaders徹底同步的消息副本,也就是說ISR中包含了全部提交的消息。ISR應該老是包含全部的副本,直到出現真正的故障。若是一個副本從leader中脫離出來,將會從ISR中刪除。
十二、Kafka爲何須要複製?
Kafka的信息複製確保了任何已發佈的消息不會丟失,而且能夠在機器錯誤、程序錯誤或更常見些的軟件升級中使用。
1三、若是副本在ISR中停留了很長時間代表什麼?
若是一個副本在ISR中保留了很長一段時間,那麼它就代表,跟蹤器沒法像在leader收集數據那樣快速地獲取數據。
1四、請說明若是首選的副本不在ISR中會發生什麼?
若是首選的副本不在ISR中,控制器將沒法將leadership轉移到首選的副本。
1五、有可能在生產後發生消息偏移嗎?
在大多數隊列系統中,做爲生產者的類沒法作到這一點,它的做用是觸發並忘記消息。broker將完成剩下的工做,好比使用id進行適當的元數據處理、偏移量等。
做爲消息的用戶,你能夠從Kafka broker中得到補償。若是你注視SimpleConsumer類,你會注意到它會獲取包括偏移量做爲列表的MultiFetchResponse對象。此外,當你對Kafka消息進行迭代時,你會擁有包括偏移量和消息發送的MessageAndOffset對象。
1六、Kafka的設計時什麼樣的呢?
Kafka將消息以topic爲單位進行概括 將向Kafka topic發佈消息的程序成爲producers. 將預訂topics並消費消息的程序成爲consumer. Kafka以集羣的方式運行,能夠由一個或多個服務組成,每一個服務叫作一個broker. producers經過網絡將消息發送到Kafka集羣,集羣向消費者提供消息
1七、數據傳輸的事物定義有哪三種?
(1)最多一次:
消息不會被重複發送,最多被傳輸一次,但也有可能一次不傳輸
(2)最少一次: 消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸.
(3)精確的一次(Exactly once): 不會漏傳輸也不會重複傳輸,每一個消息都傳輸被一次並且僅僅被傳輸一次,這是你們所指望的
1八、Kafka判斷一個節點是否還活着有那兩個條件?
(1)節點必須能夠維護和ZooKeeper的鏈接,Zookeeper經過心跳機制檢查每一個節點的鏈接
(2)若是節點是個follower,他必須能及時的同步leader的寫操做,延時不能過久
1九、producer是否直接將數據發送到broker的leader(主節點)?
producer直接將數據發送到broker的leader(主節點),不須要在多個節點進行分發,爲了幫助producer作到這點,全部的Kafka節點均可以及時的告知:哪些節點是活動的,目標topic目標分區的leader在哪。這樣producer就能夠直接將消息發送到目的地了。
20、Kafa consumer是否能夠消費指定分區消息?
Kafa consumer消費消息時,向broker發出"fetch"請求去消費特定分區的消息,consumer指定消息在日誌中的偏移量(offset),就能夠消費從這個位置開始的消息,customer擁有了offset的控制權,能夠向後回滾去從新消費以前的消息,這是頗有意義的
2一、Kafka消息是採用Pull模式,仍是Push模式?
Kafka最初考慮的問題是,customer應該從brokes拉取消息仍是brokers將消息推送到consumer,也就是pull還push。在這方面,Kafka遵循了一種大部分消息系統共同的傳統的設計:producer將消息推送到broker,consumer從broker拉取消息一些消息系統好比Scribe和Apache Flume採用了push模式,將消息推送到下游的consumer。這樣作有好處也有壞處:由broker決定消息推送的速率,對於不一樣消費速率的consumer就不太好處理了。消息系統都致力於讓consumer以最大的速率最快速的消費消息,但不幸的是,push模式下,當broker推送的速率遠大於consumer消費的速率時,consumer恐怕就要崩潰了。最終Kafka仍是選取了傳統的pull模式
Pull模式的另一個好處是consumer能夠自主決定是否批量的從broker拉取數據。Push模式必須在不知道下游consumer消費能力和消費策略的狀況下決定是當即推送每條消息仍是緩存以後批量推送。若是爲了不consumer崩潰而採用較低的推送速率,將可能致使一次只推送較少的消息而形成浪費。Pull模式下,consumer就能夠根據本身的消費能力去決定這些策略
Pull有個缺點是,若是broker沒有可供消費的消息,將致使consumer不斷在循環中輪詢,直到新消息到t達。爲了不這點,Kafka有個參數可讓consumer阻塞知道新消息到達(固然也能夠阻塞知道消息的數量達到某個特定的量這樣就能夠批量發
2二、Kafka存儲在硬盤上的消息格式是什麼?
消息由一個固定長度的頭部和可變長度的字節數組組成。頭部包含了一個版本號和CRC32校驗碼。
消息長度: 4 bytes (value: 1+4+n)
版本號: 1 byte
CRC校驗碼: 4 bytes
具體的消息: n bytes
2三、Kafka高效文件存儲設計特色:
(1).Kafka把topic中一個parition大文件分紅多個小文件段,經過多個小文件段,就容易按期清除或刪除已經消費完文件,減小磁盤佔用。
(2).經過索引信息能夠快速定位message和肯定response的最大大小。
(3).經過index元數據所有映射到memory,能夠避免segment file的IO磁盤操做。
(4).經過索引文件稀疏存儲,能夠大幅下降index文件元數據佔用空間大小。
2四、Kafka 與傳統消息系統之間有三個關鍵區別
(1).Kafka 持久化日誌,這些日誌能夠被重複讀取和無限期保留
(2).Kafka 是一個分佈式系統:它以集羣的方式運行,能夠靈活伸縮,在內部經過複製數據提高容錯能力和高可用性
(3).Kafka 支持實時的流式處理
2五、Kafka建立Topic時如何將分區放置到不一樣的Broker中
副本因子不能大於 Broker 的個數;
第一個分區(編號爲0)的第一個副本放置位置是隨機從 brokerList 選擇的;
其餘分區的第一個副本放置位置相對於第0個分區依次日後移。也就是若是咱們有5個 Broker,5個分區,假設第一個分區放在第四個 Broker 上,那麼第二個分區將會放在第五個 Broker 上;第三個分區將會放在第一個 Broker 上;第四個分區將會放在第二個 Broker 上,依次類推;
剩餘的副本相對於第一個副本放置位置實際上是由 nextReplicaShift 決定的,而這個數也是隨機產生的
2六、Kafka新建的分區會在哪一個目錄下建立
在啓動 Kafka 集羣以前,咱們須要配置好 log.dirs 參數,其值是 Kafka 數據的存放目錄,這個參數能夠配置多個目錄,目錄之間使用逗號分隔,一般這些目錄是分佈在不一樣的磁盤上用於提升讀寫性能。 固然咱們也能夠配置 log.dir 參數,含義同樣。只須要設置其中一個便可。 若是 log.dirs 參數只配置了一個目錄,那麼分配到各個 Broker 上的分區確定只能在這個目錄下建立文件夾用於存放數據。 可是若是 log.dirs 參數配置了多個目錄,那麼 Kafka 會在哪一個文件夾中建立分區目錄呢?答案是:Kafka 會在含有分區目錄最少的文件夾中建立新的分區目錄,分區目錄名爲 Topic名+分區ID。注意,是分區文件夾總數最少的目錄,而不是磁盤使用量最少的目錄!也就是說,若是你給 log.dirs 參數新增了一個新的磁盤,新的分區目錄確定是先在這個新的磁盤上建立直到這個新的磁盤目錄擁有的分區目錄不是最少爲止。
2七、partition的數據如何保存到硬盤
topic中的多個partition以文件夾的形式保存到broker,每一個分區序號從0遞增, 且消息有序 Partition文件下有多個segment(xxx.index,xxx.log) segment 文件裏的 大小和配置文件大小一致能夠根據要求修改 默認爲1g 若是大小大於1g時,會滾動一個新的segment而且以上一個segment最後一條消息的偏移量命名
2八、kafka的ack機制
request.required.acks有三個值 0 1 -1
0:生產者不會等待broker的ack,這個延遲最低可是存儲的保證最弱當server掛掉的時候就會丟數據
1:服務端會等待ack值 leader副本確認接收到消息後發送ack可是若是leader掛掉後他不確保是否複製完成新leader也會致使數據丟失
-1:一樣在1的基礎上 服務端會等全部的follower的副本受到數據後纔會受到leader發出的ack,這樣數據不會丟失
2九、Kafka的消費者如何消費數據
消費者每次消費數據的時候,消費者都會記錄消費的物理偏移量(offset)的位置 等到下次消費時,他會接着上次位置繼續消費。同時也能夠按照指定的offset進行從新消費。
30、消費者負載均衡策略
結合consumer的加入和退出進行再平衡策略。
3一、kafka消息數據是否有序?
消費者組裏某具體分區是有序的,因此要保證有序只能建一個分區,可是實際這樣會存在性能問題,具體業務具體分析後確認。
3二、kafaka生產數據時數據的分組策略,生產者決定數據產生到集羣的哪一個partition中
每一條消息都是以(key,value)格式 Key是由生產者發送數據傳入 因此生產者(key)決定了數據產生到集羣的哪一個partition
3三、kafka consumer 什麼狀況會觸發再平衡reblance?
①一旦消費者加入或退出消費組,致使消費組成員列表發生變化,消費組中的全部消費者都要執行再平衡。
②訂閱主題分區發生變化,全部消費者也都要再平衡。
3四、描述下kafka consumer 再平衡步驟?
①關閉數據拉取線程,情空隊列和消息流,提交偏移量;
②釋放分區全部權,刪除zk中分區和消費者的全部者關係;
③將全部分區從新分配給每一個消費者,每一個消費者都會分到不一樣分區;
④將分區對應的消費者全部關係寫入ZK,記錄分區的全部權信息;
⑤重啓消費者拉取線程管理器,管理每一個分區的拉取線程。
以上Kafka面試題部分來自網絡,答案僅供參考,若是有不一樣的見解能夠留言討論。死記硬背的方式不建議。若是您最近有面試到關於Kafka的面試題,歡迎留言分享哦~
下面這份是我找到的另外一篇Kafka面試資料,有須要的話點贊+關注,私信我就能獲取啦!