溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

網(wǎng)易Java研發(fā)崗二面:講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法

發(fā)布時(shí)間:2020-07-21 01:25:16 來(lái)源:網(wǎng)絡(luò) 閱讀:555 作者:java周某人 欄目:編程語(yǔ)言

網(wǎng)易Java研發(fā)崗二面:講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法


網(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>

歷年來(lái)關(guān)于Kafka的一些面試真題(含解析):

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

  2. 生產(chǎn)者和消費(fèi)者的命令行是什么?

  3. consumer 是推還是拉?

  4. 講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法

  5. 講一下主從同步

  6. 為什么需要消息系統(tǒng),mysql 不能滿足需求嗎?

  7. Zookeeper 對(duì)于 Kafka 的作用是什么?

  8. 數(shù)據(jù)傳輸?shù)氖聞?wù)定義有哪三種?

  9. Kafka 判斷一個(gè)節(jié)點(diǎn)是否還活著有那兩個(gè)條件?

  10. Kafka 與傳統(tǒng) MQ 消息系統(tǒng)之間有三個(gè)關(guān)鍵區(qū)別

  11. 講一講 kafka 的 ack 的三種機(jī)制

  12. 消費(fèi)者故障,出現(xiàn)活鎖問(wèn)題如何解決?

  13. 如何控制消費(fèi)的位置

  14. kafka 分布式(不是單機(jī))的情況下,如何保證消息的順序消費(fèi)?

  15. kafka 的高可用機(jī)制是什么?

  16. kafka 如何減少數(shù)據(jù)丟失

  17. kafka 如何不消費(fèi)重復(fù)數(shù)據(jù)?比如扣款,我們不能重復(fù)的扣。

網(wǎng)易Java研發(fā)崗二面:講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法


kafka面試真題解析

我整理的關(guān)于Kafka(含核心知識(shí)點(diǎn)以及思維導(dǎo)圖xmind):

網(wǎng)易Java研發(fā)崗二面:講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法


Kafka 概念:

Kafka 是一種高吞吐量、分布式、基于發(fā)布/訂閱的消息系統(tǒng),最初由 LinkedIn 公司開(kāi)發(fā),使用Scala 語(yǔ)言編寫(xiě),目前是 Apache 的開(kāi)源項(xiàng)目。

  1. broker:Kafka 服務(wù)器,負(fù)責(zé)消息存儲(chǔ)和轉(zhuǎn)發(fā)

  2. topic:消息類(lèi)別,Kafka 按照 topic 來(lái)分類(lèi)消息

  3. partition:topic 的分區(qū),一個(gè) topic 可以包含多個(gè) partition,topic 消息保存在各個(gè)partition 上

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

  5. Producer:消息生產(chǎn)者

  6. Consumer:消息消費(fèi)者

  7. Consumer Group:消費(fèi)者分組,每個(gè) Consumer 必須屬于一個(gè) group

  8. 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ì)解析

網(wǎng)易Java研發(fā)崗二面:講講 kafka 維護(hù)消費(fèi)狀態(tài)跟蹤的方法


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI