1. 程式人生 > 其它 >2021最新Java大廠面試題來襲

2021最新Java大廠面試題來襲

2021最新Java大廠面試題來襲

目錄

  • Kafka的基本介紹
  • Kafka的設計原理分析
  • Kafka資料傳輸的事務特點
  • Kafka訊息儲存格式
  • 副本(replication)策略
  • Kafka訊息分組,訊息消費原理
  • Kafak順序寫入與資料讀取
  • 消費者(讀取資料)

Kafka的基本介紹

Kafka是最初由Linkedin公司開發,是一個分散式、分割槽的、多副本的、多訂閱者,基於zookeeper協調的分散式日誌系統(也可以當做MQ系統),常見可以用於web/nginx日誌、訪問日誌,訊息服務等等,Linkedin於2010年貢獻給了Apache基金會併成為頂級開源專案。

主要應用場景是:日誌收集系統和訊息系統。

Kafka主要設計目標如下:

  • 以時間複雜度為O(1)的方式提供訊息持久化能力,即使對TB級以上資料也能保證常數時間的訪問效能。
  • 高吞吐率。即使在非常廉價的商用機器上也能做到單機支援每秒100K條訊息的傳輸。
  • 支援Kafka Server間的訊息分割槽,及分散式消費,同時保證每個partition內的訊息順序傳輸。
  • 同時支援離線資料處理和實時資料處理。

Kafka的設計原理分析

一個典型的kafka叢集中包含若干producer,若干broker,若干consumer,以及一個Zookeeper叢集。Kafka通過Zookeeper管理叢集配置,選舉leader,以及在consumer group發生變化時進行rebalance。producer使用push模式將訊息釋出到broker,consumer使用pull模式從broker訂閱並消費訊息。  

Kafka專用術語:

  • Broker:訊息中介軟體處理結點,一個Kafka節點就是一個broker,多個broker可以組成一個Kafka叢集。
  • Topic:一類訊息,Kafka叢集能夠同時負責多個topic的分發。
  • Partition:topic物理上的分組,一個topic可以分為多個partition,每個partition是一個有序的佇列。
  • Segment:partition物理上由多個segment組成。
  • offset:每個partition都由一系列有序的、不可變的訊息組成,這些訊息被連續的追加到partition中。partition中的每個訊息都有一個連續的序列號叫做offset,用於partition唯一標識一條訊息。
  • Producer:負責釋出訊息到Kafka broker。
  • Consumer:訊息消費者,向Kafka broker讀取訊息的客戶端。
  • Consumer Group:每個Consumer屬於一個特定的Consumer Group。

Kafka資料傳輸的事務特點

  • at most once:最多一次,這個和JMS中"非持久化"訊息類似,傳送一次,無論成敗,將不會重發。消費者fetch訊息,然後儲存offset,然後處理訊息;當client儲存offset之後,但是在訊息處理過程中出現了異常,導致部分訊息未能繼續處理。那麼此後"未處理"的訊息將不能被fetch到,這就是"at most once"。
  • at least once:訊息至少傳送一次,如果訊息未能接受成功,可能會重發,直到接收成功。消費者fetch訊息,然後處理訊息,然後儲存offset。如果訊息處理成功之後,但是在儲存offset階段zookeeper異常導致儲存操作未能執行成功,這就導致接下來再次fetch時可能獲得上次已經處理過的訊息,這就是"at least once",原因offset沒有及時的提交給zookeeper,zookeeper恢復正常還是之前offset狀態。
  • exactly once:訊息只會傳送一次。kafka中並沒有嚴格的去實現(基於2階段提交),我們認為這種策略在kafka中是沒有必要的。

通常情況下"at-least-once"是我們首選。

Kafka訊息儲存格式

Topic & Partition

一個topic可以認為一個一類訊息,每個topic將被分成多個partition,每個partition在儲存層面是append log檔案。

在Kafka檔案儲存中,同一個topic下有多個不同partition,每個partition為一個目錄,partiton命名規則為topic名稱+有序序號,第一個partiton序號從0開始,序號最大值為partitions數量減1。

  • 每個partion(目錄)相當於一個巨型檔案被平均分配到多個大小相等segment(段)資料檔案中。但每個段segment file訊息數量不一定相等,這種特性方便old segment file快速被刪除。
  • 每個partiton只需要支援順序讀寫就行了,segment檔案生命週期由服務端配置引數決定。

這樣做的好處就是能快速刪除無用檔案,有效提高磁碟利用率。

  • segment file組成:由2大部分組成,分別為index file和data file,此2個檔案一一對應,成對出現,字尾".index"和“.log”分別表示為segment索引檔案、資料檔案.
  • segment檔案命名規則:partion全域性的第一個segment從0開始,後續每個segment檔名為上一個segment檔案最後一條訊息的offset值。數值最大為64位long大小,19位數字字元長度,沒有數字用0填充。

資料分享

這是我從某優質機構弄來的一些資料,內容我認為確實稱得上優質二字,**如需領取,請點贊這篇文章,關注我然後點選這裡即可免費領取

百度網盤連結:pan.baidu.com/s/1BDrBZ5sv4rzxyDDFLbpocw

提取碼:exa7

**

首先分享一份學習大綱,內容較多,涵蓋了網際網路行業所有的流行以及核心技術,以截圖形式分享:

(億級流量效能調優實戰+一線大廠分散式實戰+架構師築基必備技能+設計思想開源框架解讀+效能直線提升架構技術+高效儲存讓專案效能起飛+分散式擴充套件到微服務架構.........實在是太多了)

其次分享一些技術知識,以截圖形式分享一部分:

Tomcat架構解析:

演算法訓練+高分寶典:

Spring Cloud+Docker微服務實戰:

最後分享一波面試資料:

切莫死記硬背,小心面試官直接讓你出門右拐

1000道網際網路Java面試題:

Java高階架構面試知識整理: