關於Kafka這些面試題你必須要知道

 

 

1、請先描述一下Kafka的總體架構

  1. Kafka生態系統四大角色,生產者(Producer)、kafka集羣(Broker)、消費者(Consumer)、zookeeper
  2. 每個消費者都必須屬於一個消費組,一個組內的消費者可以多個。
  3. 一個Topic可以有1到多個多個分區(Partition)
  4. 一個分區可以有1到多個segment。
  5. 每個segment可以有由一個log和一個index組成。
  6. 被複制的分區叫做主副本(Leader),複製出來的叫做從副本(Follower)
  7. 生產者只往主副本寫數據,消費者只在主副本拉取數據。
  8. 從副本只做數據備份,不做數據讀寫。
  9. 一個分區內的一條數據,只能被一個消費組內的一個消費者消費。
  10. 消費者的最大併發度由topic的分區數量決定
  11. 分區副本的數量必須小於等於broker的數量
  12. 一個topic內的多個分區,每個分區只是所有數據的一部分。所有分區的數據累加到一起是這個topic的全部數據。
  13. zookeeper中記錄了broker的id  、消費者消費數據的offset,消費者與partition的對應關係(ConsumerA—> Partition-0, ConsumerB—> Partition-1)

 

2、什麼是kafka

是一個分佈式,分區的,多副本的,多訂閱者的消息發佈訂閱系統

 

3、kafka的使用場景

應用耦合、異步處理、限流削峯、消息驅動的系統

 

4、kafka優缺點

優點:可靠性強(分佈式-分區-副本)、擴展性強(可伸縮)、性能高(數據讀寫)、耐用性強(數據持久化)、時效性強。

缺點:由於是批量發送,數據並非真正的實時。

僅支持同一分區內消息有序,無法實現全局消息有序;

有可能消息重複消費;

依賴zookeeper進行元數據管理。

 

5、Kafka架構(流程)

生產者、kafka集羣、消費者、zookeepe

 

6、Kafka架構(API)

生產者、消費者、StreamAPI、ConnectAP

 

7、Topic內部有哪些組成?

每個Topic包含一個或者多個Partition,一個partition當中存在多個segment文件段,每個segment分爲兩部分,.log文件和.index文件。         

 

8、分區和消費組內的消費者之間的關係有哪些情況?

Partition = 消費任務的併發度=剛剛好,每個任務讀取一個partition數據

Partition > 消費任務的併發度=有部分消費任務讀取多個分區的數據

Partition < 消費任務的併發度=有部分消費任務空閒(可以創建多於分區的消費者數量

 

9、分區數、消費者與讀取效率之間的關係

分區數越多,同一時間可以有越多的消費者來進行消費,消費數據的速度就會越快,提高消費的性

 

10、副本數與broker之間的關係

數據副本(包含本身)數一般情況下小於等於broker的個數

 

11、什麼是主/從副本

被複制的分區叫做主副本(Leader),複製出來的叫做從副本(Follower)

12、主/從複本的作用是什麼

主副本負責數據的讀寫。

從副本只做數據備份,不做數據讀寫。

 

13、Lsr是什麼?

ISR是一組與leaders完全同步的消息副本(包括leaders本身)

 

 

14、生產者生產數據到kafka集羣,數據到分區的方式

  1. 沒有指定分區編號,沒有指定key,時採用輪詢方式存戶數據
  2. 沒有指定分區編號,指定key時,數據分發策略爲對key求取hash值,這個值與分區數量取餘,於數就是分區編號。
  3. 指定分區編號,所有數據輸入到指定的分區內
  4. 自定義分區

 

15、Consumer消費數據的流程

  1. 首先Consumer連接指定的Topic partition所在leader broker,使用折半/二分查找,先確定數據所在的segment。
  2. 確定在哪個segment後,使用確定的segment內的index文件找到數據具體的位置採用pull方式從kafkalogs中獲取消息。

 

16、Kafka中的數據刪除機制是什麼?

  1. 時間:默認存儲168小時(一週)
  2. 數據的大小:默認 -1 (不刪除),可以自行設置。

 

17、Kafka如何保證數據不丟失

  1. 生產者如何保證數據不丟失??  通過ack 機制確保數據不丟失。
  2. kafka集羣如何保證數據不丟失??  通過數據副本保證數據不丟失。
  3. 消費者如何保證數據不丟失??  通過維護數據的offset 保證數據不丟失。

 

18、Kafka高性能的原因有哪裏?        

順序讀寫、分區、批量發送、數據壓 

 

19、Kafka高效查詢數據的有哪些原因

  1. Kafka把topic中一個parition大文件分成多個小文件段,通過多個小文件段,就容易定期清除或刪除已經消費完文件,減少磁盤佔用。
  2. 通過索引信息可以快速定位message和確定response的最大大小。
  3. 通過index元數據全部映射到memory,可以避免segment file的IO磁盤操作。
  4. 通過索引文件稀疏存儲,可以大幅降低index文件元數據佔用空間大小。

20、如何從Kafka得到準確的信息(不是重讀數據)?

  1. 在數據生產過程中避免重複。
  2. 在數據消耗期間避免重複。

 

21、Kafka的設計是什麼樣的呢?

Kafka將消息以topic爲單位進行歸納 將向Kafka topic發佈消息的程序成爲producers. 將預訂topics並消費消息的程序成爲consumer. Kafka以集羣的方式運行,可以由一個或多個服務組成,每個服務叫做一個broker. producers通過網絡將消息發送到Kafka集羣,集羣向消費者提供消息

 

22、數據傳輸的事物定義有哪三種?

1、最多一次:消息不會被重複發送,最多被傳輸一次,但也有可能一次不傳輸

可能會造成數據丟失。

2、最少一次: 消息不會被漏發送,最少被傳輸一次,但也有可能被重複傳輸.

可能會造成數據的重複消費。

3、精確的一次(Exactly once: 不會漏傳輸也不會重複傳輸,每個消息都傳輸被一次而且僅僅被傳輸一次,這是大家所期望的

 

23Kafka判斷一個節點是否還活着有哪些條件?

1、節點必須可以維護和ZooKeeper的連接,Zookeeper通過心跳機制檢查每個節點的連接

2、如果節點是個follower,他必須能及時的同步leader的寫操作,延時不能太久

24、Kafka 與傳統消息系統之間有哪些區別?

1、Kafka 持久化日誌:這些日誌可以被重複讀取和無限期保留

2、Kafka 是一個分佈式系統:它以集羣的方式運行,可以靈活伸縮,在內部通過複製數據提升容錯能力和高可用性

3、Kafka 支持實時的流式處理

 

25Kafka創建Topic時將分區放置到不同的Broker的策略是什麼?

前提:副本因子不能大於 Broker 的個數;

第一個分區(編號爲0)的第一個副本放置位置是隨機從 brokerList 選擇的;

其他分區的第一個副本放置位置相對於第0個分區依次往後移。

例如:有5 Broker5個分區,假設第一個分區放在第四個 Broker 上,那麼第二個分區將會放在第五個 Broker 上;第三個分區將會放在第一個 Broker 上;第四個分區將會放在第二個 Broker 上,第五個分區將會放在第三個 Broker 上;

 

26Kafka新建的分區會在哪個目錄下創建

log.dirs 參數只配置了一個目錄,那麼分配到各個 Broker 上的分區將在這個目錄下創建文件夾用於存放數據。

log.dirs 參數配置了多個目錄,那麼 Kafka 會在含有分區目錄總數最少的文件夾中創建新的分區目錄,分區目錄名爲 Topic+分區ID。注意(不是磁盤使用量最少的目錄)

27、partition的數據如何保存到硬盤

topic中的多個partition以文件夾的形式保存到broker,每個分區序號從0遞增, 且消息有序 Partition文件下有多個segment(xxx.index,xxx.log) segment 文件裏的 大小和配置文件大小一致可以根據要求修改 默認爲1g 如果大小大於1g時,會滾動一個新的segment並且以上一個segment最後一條消息的偏移量命名

 

28kafkaack機制

request.required.acks有三個值 0  1  -1

0:生產者不會等待brokerack,這個延遲最低但是存儲的保證最弱當server掛掉的時候就會丟數據

1:服務端會等待ack leader副本確認接收到消息後發送ack但是如果leader掛掉後他不確保是否複製完成新leader也會導致數據丟失

-1:同樣在1的基礎上 服務端會等所有的follower的副本受到數據後纔會受到leader發出的ack,這樣數據不會丟失

29、Kafka的消費者如何消費數據

消費者每次消費數據的時候,消費者都會記錄消費的物理偏移量(offset)的位置 等到下次消費時,他會接着上次位置繼續消費。同時也可以按照指定的offset進行重新消費。

 

30、如何使kafka集羣內的數據是有序的?

只創建一個分區。(但是實際這樣會存在性能問題,具體業務具體分析後確認。)

 

31Zookeeper彙總保留了哪些數據?

1、消費者提交的偏移量。

2、分區和消費者的所有者關

3broker id

說明:leader檢測、分佈式同步、配置管理、識別新節點何時離開或連接、集羣、節點實時狀態   

 

32kafka consumer 什麼情況會觸發再平衡reblance(負載均衡)?

1、一旦消費者加入或退出消費組,導致消費組成員列表發生變化,消費組中的所有消費者都要執行再平衡。

2、訂閱主題分區發生變化,所有消費者也都要再平衡。

 

33、描述下kafka consumer 再平衡步驟?

1、關閉數據拉取線程,清空隊列和消息流,提交偏移量;

2、釋放分區所有權,刪除zk中分區和消費者的所有者關係;

3、將所有分區重新分配給每個消費者,每個消費者都會分到不同分區;

4、將分區對應的消費者所有關係寫入ZK,記錄分區的所有權信息;

5、重啓消費者拉取線程管理器,管理每個分區的拉取線程。

 

34、手動提交offset有什麼好處??

使更新offset更及時,避免因offset更新不及時導致重複消費數據的問題。

 

35、爲什麼kafka中的數據需要定期刪除或合併?

Kafka只用於做數據的臨時存儲、臨時緩衝,不是永久存儲(永久性存儲使用HDFS)。

 

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