網易Java研發崗二面:講講 kafka 維護消費狀態跟蹤的方法

image.png


網易面試真題:講講 kafka 維護消費狀態跟蹤的方法?

解析:大部分消息系統在 broker 端的維護消息被消費的記錄:一個消息被分發到consumer 後 broker 就馬上進行標記或者等待 customer 的通知後進行標記。這樣也可以在消息在消費後立馬就刪除以減少空間佔用。
但是這樣會不會有什麼問題呢?如果一條消息發送出去之後就立即被標記爲消費過的,一旦 consumer 處理消息時失敗了(比如程序崩潰)消息就丟失了。爲了解決這個問題,很多消息系統提供了另外一個個功能:當消息被髮送出去之後僅僅被標記爲已發送狀態,當接到 consumer 已經消費成功的通知後才標記爲已被消費的狀態。這雖然解決了消息丟失的問題,但產生了新問題,首先如果 consumer處理消息成功了但是向 broker 發送響應時失敗了,這條消息將被消費兩次。第二個問題時,broker 必須維護每條消息的狀態,並且每次都要先鎖住消息然後更改狀態然後釋放鎖。這樣麻煩又來了,且不說要維護大量的狀態數據,比如如果消息發送出去但沒有收到消費成功的通知,這條消息將一直處於被鎖定的狀態,Kafka 採用了不同的策略。Topic 被分成了若干分區,每個分區在同一時間只被一個 consumer 消費。這意味着每個分區被消費的消息在日誌中的位置僅僅是一個簡單的整數:offset。這樣就很容易標記每個分區消費狀態就很容易了,僅僅需要一個整數而已。這樣消費狀態的跟蹤就很簡單了。

Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。在大廠Kafka也是經常被問到的一個問題,我學習Kafka的時候也整理一些學習筆記,和收集了很多的面試真題,希望能夠對大家有一定的幫助。

歷年來關於Kafka的一些面試真題(含解析):

  1. 如何獲取 topic 主題的列表

  2. 生產者和消費者的命令行是什麼?

  3. consumer 是推還是拉?

  4. 講講 kafka 維護消費狀態跟蹤的方法

  5. 講一下主從同步

  6. 爲什麼需要消息系統,mysql 不能滿足需求嗎?

  7. Zookeeper 對於 Kafka 的作用是什麼?

  8. 數據傳輸的事務定義有哪三種?

  9. Kafka 判斷一個節點是否還活着有那兩個條件?

  10. Kafka 與傳統 MQ 消息系統之間有三個關鍵區別

  11. 講一講 kafka 的 ack 的三種機制

  12. 消費者故障,出現活鎖問題如何解決?

  13. 如何控制消費的位置

  14. kafka 分佈式(不是單機)的情況下,如何保證消息的順序消費?

  15. kafka 的高可用機制是什麼?

  16. kafka 如何減少數據丟失

  17. kafka 如何不消費重複數據?比如扣款,我們不能重複的扣。

網易Java研發崗二面:講講 kafka 維護消費狀態跟蹤的方法


kafka面試真題解析

我整理的關於Kafka(含核心知識點以及思維導圖xmind):

網易Java研發崗二面:講講 kafka 維護消費狀態跟蹤的方法


Kafka 概念:

Kafka 是一種高吞吐量、分佈式、基於發佈/訂閱的消息系統,最初由 LinkedIn 公司開發,使用Scala 語言編寫,目前是 Apache 的開源項目。

  1. broker:Kafka 服務器,負責消息存儲和轉發

  2. topic:消息類別,Kafka 按照 topic 來分類消息

  3. partition:topic 的分區,一個 topic 可以包含多個 partition,topic 消息保存在各個partition 上

  4. offset:消息在日誌中的位置,可以理解是消息在 partition 上的偏移量,也是代表該消息的唯一序號

  5. Producer:消息生產者

  6. Consumer:消息消費者

  7. Consumer Group:消費者分組,每個 Consumer 必須屬於一個 group

  8. Zookeeper:保存着集羣 broker、topic、partition 等 meta 數據;另外,還負責 broker 故障發現,partition leader 選舉,負載均衡等功能

Kafka 數據存儲設計:

  • partition 的數據文件(offset,MessageSize,data)

  • 數據文件分段 segment(順序讀寫、分段命令、二分查找)

  • 數據文件索引(分段索引、稀疏存儲)

生產者設計:

  • 負載均衡(partition 會均衡分佈到不同 broker 上)

  • 批量發送

  • 壓縮(GZIP 或 Snappy)

消費者設計:

Consumer Group

讀者福利:

由於題量較多,篇幅的限制,文章中的面試題分享沒有全部附上詳細的解析,希望各位同仁理解

但是整理成了一份詳細的PDF文檔可分享給大家

領取方式:關注我的供種號(Java周某人)即可領取

近千道大廠面試題整理(PDF)帶詳細解析

網易Java研發崗二面:講講 kafka 維護消費狀態跟蹤的方法


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