您好,登錄后才能下訂單哦!
網(wǎng)易面試真題:講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法?
解析:大部分消息系統(tǒng)在 broker 端的維護(hù)消息被消費(fèi)的記錄:一個(gè)消息被分發(fā)到consumer 后 broker 就馬上進(jìn)行標(biāo)記或者等待 customer 的通知后進(jìn)行標(biāo)記。這樣也可以在消息在消費(fèi)后立馬就刪除以減少空間占用。
但是這樣會(huì)不會(huì)有什么問(wèn)題呢?如果一條消息發(fā)送出去之后就立即被標(biāo)記為消費(fèi)過(guò)的,一旦 consumer 處理消息時(shí)失敗了(比如程序崩潰)消息就丟失了。為了解決這個(gè)問(wèn)題,很多消息系統(tǒng)提供了另外一個(gè)個(gè)功能:當(dāng)消息被發(fā)送出去之后僅僅被標(biāo)記為已發(fā)送狀態(tài),當(dāng)接到 consumer 已經(jīng)消費(fèi)成功的通知后才標(biāo)記為已被消費(fèi)的狀態(tài)。這雖然解決了消息丟失的問(wèn)題,但產(chǎn)生了新問(wèn)題,首先如果 consumer處理消息成功了但是向 broker 發(fā)送響應(yīng)時(shí)失敗了,這條消息將被消費(fèi)兩次。第二個(gè)問(wèn)題時(shí),broker 必須維護(hù)每條消息的狀態(tài),并且每次都要先鎖住消息然后更改狀態(tài)然后釋放鎖。這樣麻煩又來(lái)了,且不說(shuō)要維護(hù)大量的狀態(tài)數(shù)據(jù),比如如果消息發(fā)送出去但沒(méi)有收到消費(fèi)成功的通知,這條消息將一直處于被鎖定的狀態(tài),Kafka 采用了不同的策略。Topic 被分成了若干分區(qū),每個(gè)分區(qū)在同一時(shí)間只被一個(gè) consumer 消費(fèi)。這意味著每個(gè)分區(qū)被消費(fèi)的消息在日志中的位置僅僅是一個(gè)簡(jiǎn)單的整數(shù):offset。這樣就很容易標(biāo)記每個(gè)分區(qū)消費(fèi)狀態(tài)就很容易了,僅僅需要一個(gè)整數(shù)而已。這樣消費(fèi)狀態(tài)的跟蹤就很簡(jiǎn)單了。
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費(fèi)者在網(wǎng)站中的所有動(dòng)作流數(shù)據(jù)。 這種動(dòng)作(網(wǎng)頁(yè)瀏覽,搜索和其他用戶(hù)的行動(dòng))是在現(xiàn)代網(wǎng)絡(luò)上的許多社會(huì)功能的一個(gè)關(guān)鍵因素。 這些數(shù)據(jù)通常是由于吞吐量的要求而通過(guò)處理日志和日志聚合來(lái)解決。在大廠Kafka也是經(jīng)常被問(wèn)到的一個(gè)問(wèn)題,我學(xué)習(xí)Kafka的時(shí)候也整理一些學(xué)習(xí)筆記,和收集了很多的面試真題,希望能夠?qū)Υ蠹矣幸欢ǖ膸椭?/p>
如何獲取 topic 主題的列表
生產(chǎn)者和消費(fèi)者的命令行是什么?
consumer 是推還是拉?
講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法
講一下主從同步
為什么需要消息系統(tǒng),mysql 不能滿足需求嗎?
Zookeeper 對(duì)于 Kafka 的作用是什么?
數(shù)據(jù)傳輸?shù)氖聞?wù)定義有哪三種?
Kafka 判斷一個(gè)節(jié)點(diǎn)是否還活著有那兩個(gè)條件?
Kafka 與傳統(tǒng) MQ 消息系統(tǒng)之間有三個(gè)關(guān)鍵區(qū)別
講一講 kafka 的 ack 的三種機(jī)制
消費(fèi)者故障,出現(xiàn)活鎖問(wèn)題如何解決?
如何控制消費(fèi)的位置
kafka 分布式(不是單機(jī))的情況下,如何保證消息的順序消費(fèi)?
kafka 的高可用機(jī)制是什么?
kafka 如何減少數(shù)據(jù)丟失
kafka 如何不消費(fèi)重復(fù)數(shù)據(jù)?比如扣款,我們不能重復(fù)的扣。
我整理的關(guān)于Kafka(含核心知識(shí)點(diǎn)以及思維導(dǎo)圖xmind):
Kafka 概念:
Kafka 是一種高吞吐量、分布式、基于發(fā)布/訂閱的消息系統(tǒng),最初由 LinkedIn 公司開(kāi)發(fā),使用Scala 語(yǔ)言編寫(xiě),目前是 Apache 的開(kāi)源項(xiàng)目。
broker:Kafka 服務(wù)器,負(fù)責(zé)消息存儲(chǔ)和轉(zhuǎn)發(fā)
topic:消息類(lèi)別,Kafka 按照 topic 來(lái)分類(lèi)消息
partition:topic 的分區(qū),一個(gè) topic 可以包含多個(gè) partition,topic 消息保存在各個(gè)partition 上
offset:消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表該消息的唯一序號(hào)
Producer:消息生產(chǎn)者
Consumer:消息消費(fèi)者
Consumer Group:消費(fèi)者分組,每個(gè) Consumer 必須屬于一個(gè) group
Zookeeper:保存著集群 broker、topic、partition 等 meta 數(shù)據(jù);另外,還負(fù)責(zé) broker 故障發(fā)現(xiàn),partition leader 選舉,負(fù)載均衡等功能
Kafka 數(shù)據(jù)存儲(chǔ)設(shè)計(jì):
partition 的數(shù)據(jù)文件(offset,MessageSize,data)
數(shù)據(jù)文件分段 segment(順序讀寫(xiě)、分段命令、二分查找)
數(shù)據(jù)文件索引(分段索引、稀疏存儲(chǔ))
生產(chǎn)者設(shè)計(jì):
負(fù)載均衡(partition 會(huì)均衡分布到不同 broker 上)
批量發(fā)送
壓縮(GZIP 或 Snappy)
消費(fèi)者設(shè)計(jì):
Consumer Group
由于題量較多,篇幅的限制,文章中的面試題分享沒(méi)有全部附上詳細(xì)的解析,希望各位同仁理解
但是整理成了一份詳細(xì)的PDF文檔可分享給大家
領(lǐng)取方式:關(guān)注我的供種號(hào)(Java周某人)即可領(lǐng)取
近千道大廠面試題整理(PDF)帶詳細(xì)解析
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。