Kafka面試你不得不知道的基礎知識
阿新 • • 發佈:2020-05-20
1. [Java記憶體管理面試指南一](https://zthinker.com/archives/java-memory-interview-1)
2. [Java基礎面試指南一](https://zthinker.com/archives/java-basic-interview-1)
3. [Java基礎面試指南二](https://zthinker.com/archives/java-basic-interview-2)
4. [Java基礎面試指南三](https://zthinker.com/archives/java-basic-interview-3)
5. [Java基礎面試指南四](https://zthinker.com/archives/java-basic-interview-4)
6. [Java執行緒面試指南一](https://zthinker.com/archives/java-thread-interview-1)
7. [Java執行緒面試指南二](https://zthinker.com/archives/java-thread-interview-2)
8. [Redis面試指南一](https://zthinker.com/archives/redis-interview-1)
9. [Kafka面試指南一](https://zthinker.com/archives/kafka-interview-1)
10. [Spring面試指南一](https://zthinker.com/archives/spring-interview-1)
11. [SpringBoot面試指南一](https://zthinker.com/archives/springboot-interview-1)
12. [微服務面試指南一](https://zthinker.com/archives/microservice-interview-1)
#### [1. Kafka訊息傳遞系統與其他訊息傳遞框架有何不同?](#collapse-beginner-975)
Kafka是由Apache基金會開發的訊息傳遞框架,該框架將建立建立訊息傳遞系統以及可提供容錯群集以及低延遲系統,以確保端到端交付.
以下是要點:
* Kafka是一個訊息傳遞系統,它提供了容錯功能以防止訊息丟失.
* 在public-subscribe 模型上進行設計.
* Kafka cab支援Java和Scala.
* Kafka起源於LinkedIn,後來在2011年成為開源Apache專案
* 與Spark和其他大資料技術無縫協作.
* 支援叢集模式操作
* Kafka訊息傳遞系統可以用於Web服務體系結構或大資料體系結構.
* 與其他訊息傳遞框架相比,Kafka易於編碼和配置.
Kafka需要其他元件(例如zookeeper)來建立叢集並充當協調伺服器
#### [2. Kafka的主要功能是什麼?](#collapse-beginner-976)
除了具有其他關鍵功能之外,Kafka還為從生產者到消費者的資訊提供了可靠的傳遞方式.
* Kafka旨在實現高吞吐量和容錯訊息服務.
* Kafka提供了在Topic上構建patriation.
* 還提供複製功能.
* Kafka提供了一個佇列,該佇列可以處理大量資料,並最終將訊息從一個傳送者傳輸到接收者.
* Kafka還將訊息保留在磁碟中,並具有跨群集複製訊息的功能
* Kafka與Zookeeper合作,與其他服務進行協調和同步.
* Kafka具有良好的內建支援Apache Spark.
要利用所有這些關鍵功能,我們需要與Zookeeper配置一起正確配置Kafka叢集.
#### [3. 使用Kafka比不提供JMS,RabbitMQ等其他訊息傳遞服務的好處?](#collapse-beginner-977)
如今,kafka是一個基於Key的訊息傳遞框架,它有以下幾個關鍵點.
* **可靠性** -Kafka提供了從釋出者到訂閱者的可靠傳遞,而訊息丟失為零.
* **可伸縮性** -Kafka通過與Zookeeper協調伺服器一起使用群集來實現此功能
* **耐用性** -通過使用分散式日誌,訊息可以保留在磁碟上.
* **效能** -Kafka在釋出和訂閱應用程式中提供高吞吐量和低延遲.
考慮到上述功能,Kafka是Bigdata Technologies用來處理大量訊息以實現平穩傳遞的最佳選擇之一.
#### [4. Kafka的實際用例是什麼,它與其他訊息傳遞框架有什麼不同?](#collapse-beginner-978)
有很多用例,Kafka適合實際工作應用程式,但是下面列出的是經常使用的實際工作用例.
* **指標**:用於監視操作資料,可用於分析或對從分散式系統中收集的資料進行統計操作
* **日誌聚合解決方案**:可以在整個組織中使用,以收集來自多個服務的日誌,消費者服務使用這些日誌來執行分析操作.
* **流處理**:Kafka的強大耐用性在流處理方面也非常有用.
* **非同步通訊**:在微服務中,使這個龐大的系統保持同步是不希望的,因為它會使整個應用程式無響應. 而且,它一開始可能會破壞劃分為微服務的整個目的. 因此,那時使用Kafka可使整個資料流變得更容易. 因為它是分散式的,所以具有很高的容錯能力,並且可以通過Zookeeper等服務對代理節點進行持續監控. 因此,它使工作效率更高.
* **聊天機器人**:當我們需要可靠的訊息傳遞服務以順利交付時,聊天機器人是最受歡迎的用例之一.
* **多租戶解決方案**. 通過配置哪些主題可以產生或使用資料來啟用多租戶. 配額也有運營支援
上面是主要需要Kafka框架的用例,除此之外,還有其他一些情況取決於需求和設計.
#### [5. 為什麼我們需要Kafka而不是其他訊息服務?](#collapse-beginner-979)
現在讓我們談論一些現代的資料來源,它是一種資料-諸如訂單,庫存和購物車之類的交易資料-諸如單擊,點贊,推薦和在網頁上的搜尋之類的內容正在得到增強. 所有這些資料對於分析消費者的行為非常重要,並且可以提供一組預測分析引擎,這些引擎可以成為公司的與眾不同之處.
* 支援低延遲訊息傳遞.
* 處理實時流量.
* 保證容錯能力.
* 易於與Spark應用程式整合,以處理大量訊息資料.
* 能夠建立訊息傳遞容器叢集,該叢集由諸如Zookeeper之類的協調伺服器進行監視和監督.
因此,當我們需要處理這種資料量時,我們需要Kafka來解決此問題.
#### [6. 帶元件的Kafka流程圖?](#collapse-beginner-980)
Kafka流程圖包含以下基本元件,這是設定訊息傳遞基礎結構所必需的.
* Topic
* Broker
* Zookeeper
* Partition
* Producer
* Consume
![Kafka流程圖](https://www.images.mdan.top/kafka_1589934064546.png)
客戶端和伺服器之間的通訊是通過簡單,高效能,與語言無關的TCP協議完成的. 該協議已版本化,並與舊版本保持向後相容性
#### [7.什麼是主題?Kafka如何使用該主題從生產者到消費者進行交流?](#collapse-beginner-981)
主題是將記錄釋出到的邏輯名稱. Kafka中的主題支援多使用者模型,因此該主題可以有零個,一個或多個使用者來訂閱寫入該主題的資料.
* 主題是保留訊息流的特定類別.
* 主題分為多個分割槽.
* 對於每個Kafka,至少應有一個分割槽.
* 每個分割槽均以未修改的有序順序包含訊息或有效負載.
* 分割槽中的每個訊息都有一個識別符號,稱為偏移量.
* 主題具有名稱,並且在整個叢集中必須唯一.
* 生產者需要主題來發布有效負載.
* 消費者從消費者那裡提取了相同的有效載荷.
* 對於每個主題,群集維護的日誌如下所示.
![多訂戶模型](https://www.images.mdan.top/partition_1589934143285.png)
每個分割槽都有一個有序且不可變的記錄序列,該記錄序列被連續附加到一個結構化的提交日誌中. Kafka叢集使用可配置的保留期限持久地保留所有已釋出記錄(無論是否已被使用).
#### [8. 什麼是分割槽?](#collapse-beginner-982)
Kafka主題被共享到分割槽中,該分割槽以不可修改的順序包含訊息.
* 分割槽是資料的邏輯分組.
* 分割槽允許您通過跨多個代理將主題中的資料拆分來並行化主題.
* 主題中可以分組有一個或多個分割槽.
* 分割槽允許通過跨多個群集在多個主題中拆分資料來並行化主題.
* 每個分割槽都有一個名為offset的識別符號.
* 每個分割槽都可以放置在單獨的計算機上,以允許多個使用者並行讀取主題.
![隔斷](https://www.images.mdan.top/topic_1589934221144.png)
#### [9. 什麼是分割槽偏移量?](#collapse-beginner-983)
偏移量是分割槽內記錄的唯一識別符號. 它表示使用者在分割槽中的位置. 消費者可以從特定的偏移量開始讀取訊息,也可以從他們選擇的任何偏移量點進行讀取.
* 分割槽偏移具有唯一的序列ID,稱為偏移.
* 每個分割槽應具有一個分割槽偏移量.
主題還可以具有多個分割槽日誌,如右側影象中的click-topic一樣. 這允許多個使用者並行地從一個主題中閱讀.
#### [10. 什麼是Broker?Kafka如何利用Broker進行交流?](#collapse-beginner-984)
* Broker是負責維護髮布資料的系統.
* 每個代理可以具有一個或多個分割槽.
* Kafka包含多個代理來維護負載均衡器.
* Kafka Broker是無狀態的
* 例如:假設一個主題中有N個分割槽,並且有N個代理,那麼每個代理都有1個