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高階架構面試知識整理: