關於 Kafka 的一些面試題目

上週客串了一下面試官,在這裏就簡單記錄一下期間我問到的一些關於 Kafka 的面試題目,這些都是我平時在學習 Kafka 的一些總結要點。面試

  • 談談你對 kafka 的總體認識?

問這個問題主要是想知道面試者對 Kafka 的總體認識如何,可以大體瞭解清楚面試者對 Kafka 的相關概念的熟悉程度,好比消息、topic、partition、replica、offset、重平衡、leader/follower、ISR 等等。後端

  • 談談 Kafka 吞吐量爲什麼如此高?

多分區、batch send、kafka Reator 網絡模型、pagecache、sendfile 零拷貝、數據壓縮。安全

  • 談談你對生產者儲水池機制的理解

sender 線程工做機制、ByteBuffer 緩衝區的做用等等:網絡

  • 如何提升kafka吞吐量?

生產端調整 batch.size、linger.ms 參數,以及主題分區數合理分配等。session

  • 生產者producer是線程安全的嗎?多線程實例仍是單線程實例優缺點?

  • 消費者 consumer 是線程安全的嗎?多線程實例、單線程實例、單 consumer + 多 worker 線程的優缺點?

  • 消息拉取時,什麼狀況下會形成消息重複消費?談談你對位移提交的理解?

理解消息交付語義:多線程

最多一次(atmostonce):消息可能丟失也可能被處理,但最多隻會被處理一次;併發

至少一次(atleastonce):消息不會丟失,但可能被處理屢次;源碼分析

精確一次(exactlyonce):消息被處理且只會被處理一次。性能

倘若消費者在消費前提交位移,那麼就是「最多一次」,若在消費後提交位移,那麼就是「最少一次」,若是可以保證消費和提交位移同在一個事務中執行,就可保證「精確一次」。__consumer_offsets的一些理解。學習

  • 何時會產生消費組重平衡以及重平衡會涉及到哪些相關參數、頻繁重平衡會形成哪些後果?

消費組成員變動、主題數量變動、訂閱信息變動;session.timeout.ms、max.poll.interval.ms、hearbeat.interval.ms;

相關文章:Kafka重平衡機制

  • kafka默認不支持自動分區重分配,那麼若是讓你來執行分區重分配,有哪幾個步驟,以及在重分配過程當中kafka會有哪些動做?

RAR、OAR、AR、RAR-OAR、OAR-RAR 相關概念,

相關文章:記一次 Kafka 線上擴容Kafka 分區重分配源碼分析

  • 談談你對 Preferred leader 選舉的理解?

在 broker 掛掉以後,分區 leader 會變動,長此以往就會變得不均衡,Kafka 默認序號最小的副本爲 Preferred leader,在 broker 重啓回來後,Kafka 會從新調整分區的 Preferred leader 成爲 leader,Preferred leader 選舉分爲手動選舉和自動選舉,涉及參數 auto.leader.rebalance.enable,還有個默認容許 10% 不均衡策略等等。

  • 談談你對 ISR 副本同步的理解?ISR副本同步的缺陷有哪些?

相關文章:Kafka ISR 副本同步機制

  • 談談你對水印備份機制的理解?LEO 更新機制、HW 更新機制?

相關文章:圖解:Kafka 水印備份機制

  • 水印備份機制的一些缺陷?數據丟失、數據離散?如何解決的(leader epoch)

相關文章:圖解:Kafka 水印備份機制

  • 談談你對 controller 機制的理解?controller 主要有哪些功能?

更新集羣元數據信息、建立主題、刪除主題、分區重分配、preferred leader 副本選舉、主題分區擴展、broker 加入集羣、broker 崩潰、受控關閉、controller leader 選舉。

  • Kafka 的日誌存儲機制?

每一個分區擁有單獨的日誌(partition log)、順序寫、到必定大小分紅日誌段文件(log segment file)、每一個 log 文件對應一個索引文件(.index .timeindex)等等。

  • Kafka 分區數越多性能就越好嗎?爲何?

個人理解:

  1. 每一個分區數都對應一個 log 文件,log 文件是順序寫的,但若是有很是多分區同時刷盤,就會變相成亂序寫了,我猜測這也是爲何 RocketMQ 一個 broker 只會擁有一個 CommitLog 的緣由之一吧;
  2. 客戶端會爲每一個分區調用一條線程處理,多線程併發地處理分區消息,分區越多,意味着處理的線程數也就越多,到必定程度後,會形成線程切換開銷大;
  3. 其中一個 broker 掛掉後,若是此時分區特別多,Kafka 分區 leader 從新選舉的時間大大增長;
  4. 每一個分區對應都有文件句柄,分區越多,系統文件句柄就越多;
  5. 客戶端在會爲每一個分區分配必定的緩衝區,若是分區過多,分配的內存也越大。

更多精彩文章請關注做者維護的公衆號「後端進階」,這是一個專一後端相關技術的公衆號。

關注公衆號並回復「後端」免費領取後端相關電子書籍。

歡迎分享,轉載請保留出處。

公衆號「後端進階」,專一後端技術分享!

相關文章
相關標籤/搜索