關於 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 參數,以及主題分區數合理分配等。

  • 生產者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. 客戶端在會爲每個分區分配一定的緩衝區,如果分區過多,分配的內存也越大。

    更多精彩文章請關注作者維護的公衆號「後端進階」,這是一個專注後端相關技術的公衆號。
    關注公衆號並回復「後端」免費領取後端相關電子書籍。
    歡迎分享,轉載請保留出處。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章