網易面試真題:講講 kafka 維護消費狀態跟蹤的方法?mysql
解析:大部分消息系統在 broker 端的維護消息被消費的記錄:一個消息被分發到consumer 後 broker 就立刻進行標記或者等待 customer 的通知後進行標記。這樣也能夠在消息在消費後立馬就刪除以減小空間佔用。
可是這樣會不會有什麼問題呢?若是一條消息發送出去以後就當即被標記爲消費過的,一旦 consumer 處理消息時失敗了(好比程序崩潰)消息就丟失了。爲了解決這個問題,不少消息系統提供了另一個個功能:當消息被髮送出去以後僅僅被標記爲已發送狀態,當接到 consumer 已經消費成功的通知後才標記爲已被消費的狀態。這雖然解決了消息丟失的問題,但產生了新問題,首先若是 consumer處理消息成功了可是向 broker 發送響應時失敗了,這條消息將被消費兩次。第二個問題時,broker 必須維護每條消息的狀態,而且每次都要先鎖住消息而後更改狀態而後釋放鎖。這樣麻煩又來了,且不說要維護大量的狀態數據,好比若是消息發送出去但沒有收到消費成功的通知,這條消息將一直處於被鎖定的狀態,Kafka 採用了不一樣的策略。Topic 被分紅了若干分區,每一個分區在同一時間只被一個 consumer 消費。這意味着每一個分區被消費的消息在日誌中的位置僅僅是一個簡單的整數:offset。這樣就很容易標記每一個分區消費狀態就很容易了,僅僅須要一個整數而已。這樣消費狀態的跟蹤就很簡單了。面試
Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它能夠處理消費者在網站中的全部動做流數據。 這種動做(網頁瀏覽,搜索和其餘用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據一般是因爲吞吐量的要求而經過處理日誌和日誌聚合來解決。在大廠Kafka也是常常被問到的一個問題,我學習Kafka的時候也整理一些學習筆記,和收集了不少的面試真題,但願可以對你們有必定的幫助。sql
如何獲取 topic 主題的列表服務器
生產者和消費者的命令行是什麼?網絡
consumer 是推仍是拉?app
講講 kafka 維護消費狀態跟蹤的方法負載均衡
講一下主從同步分佈式
爲何須要消息系統,mysql 不能知足需求嗎?ide
Zookeeper 對於 Kafka 的做用是什麼?學習
數據傳輸的事務定義有哪三種?
Kafka 判斷一個節點是否還活着有那兩個條件?
Kafka 與傳統 MQ 消息系統之間有三個關鍵區別
講一講 kafka 的 ack 的三種機制
消費者故障,出現活鎖問題如何解決?
如何控制消費的位置
kafka 分佈式(不是單機)的狀況下,如何保證消息的順序消費?
kafka 的高可用機制是什麼?
kafka 如何減小數據丟失
kafka 如何不消費重複數據?好比扣款,咱們不能重複的扣。
我整理的關於Kafka(含核心知識點以及思惟導圖xmind):
Kafka 概念:
Kafka 是一種高吞吐量、分佈式、基於發佈/訂閱的消息系統,最初由 LinkedIn 公司開發,使用Scala 語言編寫,目前是 Apache 的開源項目。
broker:Kafka 服務器,負責消息存儲和轉發
topic:消息類別,Kafka 按照 topic 來分類消息
partition:topic 的分區,一個 topic 能夠包含多個 partition,topic 消息保存在各個partition 上
offset:消息在日誌中的位置,能夠理解是消息在 partition 上的偏移量,也是表明該消息的惟一序號
Producer:消息生產者
Consumer:消息消費者
Consumer Group:消費者分組,每一個 Consumer 必須屬於一個 group
Zookeeper:保存着集羣 broker、topic、partition 等 meta 數據;另外,還負責 broker 故障發現,partition leader 選舉,負載均衡等功能
Kafka 數據存儲設計:
partition 的數據文件(offset,MessageSize,data)
數據文件分段 segment(順序讀寫、分段命令、二分查找)
數據文件索引(分段索引、稀疏存儲)
生產者設計:
負載均衡(partition 會均衡分佈到不一樣 broker 上)
批量發送
壓縮(GZIP 或 Snappy)
消費者設計:
Consumer Group
因爲題量較多,篇幅的限制,文章中的面試題分享沒有所有附上詳細的解析,但願各位同仁理解
可是整理成了一份詳細的PDF文檔可分享給你們
領取方式:關注個人供種號(Java周某人)便可領取
近千道大廠面試題整理(PDF)帶詳細解析