溫馨提示×

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

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

Java程序員面試必備——kafka的專業(yè)術(shù)語(yǔ)

發(fā)布時(shí)間:2020-07-28 19:24:54 來(lái)源:網(wǎng)絡(luò) 閱讀:279 作者:愛(ài)碼仕i 欄目:編程語(yǔ)言

Java程序員面試必備——kafka的專業(yè)術(shù)語(yǔ)

主題 + 客戶端

  1. 發(fā)布訂閱的對(duì)象是主題(Topic)

  2. 向主題發(fā)布消息的客戶端應(yīng)用程序稱為生產(chǎn)者(Producer),生產(chǎn)者可以持續(xù)不斷地向多個(gè)主題發(fā)送消息

  3. 訂閱這些主題消息的客戶端應(yīng)用程序稱為消費(fèi)者(Consumer),消費(fèi)者能夠同時(shí)訂閱多個(gè)主題的消息

  4. 生產(chǎn)者和消費(fèi)者統(tǒng)稱為客戶端

服務(wù)端

  1. Kafka的服務(wù)端由被稱為Broker的服務(wù)進(jìn)程構(gòu)成,一個(gè)Kafka集群由多個(gè)Broker組成

  2. Broker負(fù)責(zé)接收和處理客戶端發(fā)送過(guò)來(lái)的請(qǐng)求,以及對(duì)消息進(jìn)行持久化

  3. 多個(gè)Broker進(jìn)程能夠運(yùn)行在同一臺(tái)機(jī)器上,但更常見的做法是將不同的Broker分散運(yùn)行在不同的機(jī)器上
  • 這樣如果集群中某一臺(tái)機(jī)器宕機(jī)了,即使在它上面運(yùn)行的所有Broker進(jìn)程都掛掉了
  • 其他機(jī)器上的Broker也依然能夠?qū)ν馓峁┓?wù),這是Kafka提供高可用的手段之一

備份

  1. 實(shí)現(xiàn)高可用的另一個(gè)手段是備份機(jī)制(Replication)

  2. 備份:把相同的數(shù)據(jù)拷貝到多臺(tái)機(jī)器上,這些相同的數(shù)據(jù)拷貝在Kafka中被稱為副本(Replica)

  3. 副本的數(shù)量是可以配置的,Kafka定義了兩類副本:領(lǐng)導(dǎo)者副本(Leader Replica)和追隨者副本(Follower Replica)
  • 領(lǐng)導(dǎo)者副本:對(duì)外提供服務(wù),對(duì)外指的是與客戶端程序進(jìn)行交互
  • 生產(chǎn)者總是向領(lǐng)導(dǎo)者副本寫消息
  • 消費(fèi)者總是從領(lǐng)導(dǎo)者副本讀消息
  • 追隨者副本:被動(dòng)地追隨領(lǐng)導(dǎo)者副本,不能與外界交互
  • 向領(lǐng)導(dǎo)者副本發(fā)送請(qǐng)求,請(qǐng)求領(lǐng)導(dǎo)者副本把最新生產(chǎn)的消息發(fā)給它,進(jìn)而與領(lǐng)導(dǎo)者副本保持同步
  • MySQL的從庫(kù)是可以處理讀請(qǐng)求的
  • Master-Slave => Leader-Follower
  1. 副本機(jī)制可以保證數(shù)據(jù)的持久化或者消息不丟失,但沒(méi)有解決伸縮性(Scalability)的問(wèn)題
  • 如果領(lǐng)導(dǎo)者副本積累了太多的數(shù)據(jù)以至于單臺(tái)Broker機(jī)器無(wú)法容納,該如何處理?
  • 可以把數(shù)據(jù)分割成多份,然后保存在不同的Broker上,這種機(jī)制就是分區(qū)(Partitioning)
  • MongoDB、Elasticsearch – Sharding
  • HBase – Region

分區(qū)

  1. Kafka中的分區(qū)機(jī)制是將每個(gè)主題劃分成多個(gè)分區(qū)(Partition),每個(gè)分區(qū)是一組有序的消息日志

  2. 生產(chǎn)者生產(chǎn)的每條消息只會(huì)被發(fā)送到一個(gè)分區(qū)中,Kafka的分區(qū)編號(hào)是從0開始的

  3. 副本是在分區(qū)這個(gè)層級(jí)定義的,每個(gè)分區(qū)下可以配置N個(gè)副本,只能有1個(gè)領(lǐng)導(dǎo)者副本和N-1個(gè)追隨者副本

  4. 生產(chǎn)者向分區(qū)(分區(qū)的領(lǐng)導(dǎo)者副本)寫入消息,每條消息在分區(qū)中的位置由位移(Offset)來(lái)表征,而分區(qū)位移總是從0開始

  5. 三層消息架構(gòu)
  • 第一層是主題層,每個(gè)主題可以配置M個(gè)分區(qū),而每個(gè)分區(qū)又可以配置N個(gè)副本
  • 第二層是分區(qū)
  • 每個(gè)分區(qū)的N個(gè)副本中只能有1個(gè)領(lǐng)導(dǎo)者副本,對(duì)外提供服務(wù)
  • 其他N-1個(gè)副本是追隨者副本,只能提供數(shù)據(jù)冗余
  • 第三層是消息層,分區(qū)中包含若干條消息,每條消息的位移從0開始,依次遞增
  • 最后,客戶端程序只能與分區(qū)的領(lǐng)導(dǎo)者副本進(jìn)行交互

持久化

  1. Kafka使用消息日志(Log)來(lái)保存數(shù)據(jù),一個(gè)日志是磁盤上一個(gè)只能追加寫(Append-Only)消息的物理文件
  • 只能追加寫入,避免了緩慢的隨機(jī)IO操作,改為性能較好的順序IO操作,這是實(shí)現(xiàn)Kafka高吞吐量的一個(gè)重要手段
  1. Kafka需要定期刪除消息以回收磁盤空間,可以通過(guò)日志片段(Log Segment)機(jī)制來(lái)實(shí)現(xiàn)
  • 在Kafka底層,一個(gè)日志又被細(xì)分成多個(gè)日志段,消息被追加到當(dāng)前最新的日志段
  • 當(dāng)寫滿一個(gè)日志段后,Kafka會(huì)自動(dòng)切分出一個(gè)新的日志段,并將老的日志段封存起來(lái)
  • Kafka在后臺(tái)有定時(shí)任務(wù)定期地檢查這些老的日志段是否能夠被刪除,從而實(shí)現(xiàn)回收磁盤空間的目的

消費(fèi)者

  1. 點(diǎn)對(duì)點(diǎn)模型(Peer to Peer,P2P):同一條消息只能被下游的一個(gè)消費(fèi)者消費(fèi),其他消費(fèi)者不能染指

  2. Kafka通過(guò)消費(fèi)者組(Consumer Group)來(lái)實(shí)現(xiàn)P2P模型
  • 消費(fèi)者組:多個(gè)消費(fèi)者實(shí)例共同組成一個(gè)組來(lái)消費(fèi)一組主題
  • 這組主題中的每個(gè)分區(qū)都只會(huì)被組內(nèi)的一個(gè)消費(fèi)者實(shí)例消費(fèi),其他消費(fèi)者實(shí)例不能消費(fèi)它
  • 消費(fèi)者對(duì)分區(qū)有所有權(quán)
  1. 引入消費(fèi)者組的目的:提高消費(fèi)者端的吞吐量(TPS)

  2. 消費(fèi)者實(shí)例(Consumer Instance):即可以是運(yùn)行消費(fèi)者應(yīng)用的進(jìn),也可以是一個(gè)線程

  3. 重平衡(Rebalance)
  • 若組內(nèi)的某個(gè)實(shí)例掛了,Kafka能夠自動(dòng)檢測(cè)到,然后把這個(gè)掛掉的實(shí)例之前負(fù)責(zé)的分區(qū)轉(zhuǎn)移給組內(nèi)其他存活的消費(fèi)者
  • 重平衡引發(fā)的消費(fèi)者問(wèn)題很多,目前很多重平衡的Bug社區(qū)都無(wú)力解決
  1. 消費(fèi)者位移(Consumer Offset):記錄消費(fèi)者當(dāng)前消費(fèi)到了分區(qū)的哪個(gè)位置,隨時(shí)變化
  • 分區(qū)位移:表征的是消息在分區(qū)內(nèi)的位置,一旦消息被成功寫入到一個(gè)分區(qū)上,消息的分區(qū)位移就固定

小結(jié)

Java程序員面試必備——kafka的專業(yè)術(shù)語(yǔ)

  1. 消息(Record):消息是Kafka處理的主要對(duì)象

  2. 主題(Topic):主題是承載消息的邏輯容器,實(shí)際使用中多用來(lái)區(qū)分具體的業(yè)務(wù)

  3. 分區(qū)(Partition):一個(gè)有序不變的消息序列,每個(gè)主題下有多個(gè)分區(qū)

  4. 消息位移(Offset):也叫分區(qū)位移,表示一條消息在分區(qū)中的位置,是一個(gè)單調(diào)遞增且不變的值

  5. 副本(Replica)
  • Kafka中同一條消息能夠被拷貝到多個(gè)地方以提供數(shù)據(jù)冗余
  • 副本分為領(lǐng)導(dǎo)者副本和追隨者副本,副本在分區(qū)的層級(jí)下,每個(gè)分區(qū)可配置多個(gè)副本實(shí)現(xiàn)高可用
  1. 生產(chǎn)者(Producer):向主題發(fā)布消息的應(yīng)用程序

  2. 消費(fèi)者(Consumer):從主題訂閱消息的應(yīng)用程序

  3. 消費(fèi)者位移(Consumer Offset):表征消費(fèi)者的消費(fèi)進(jìn)度,每個(gè)消費(fèi)者都有自己的消費(fèi)者位移

  4. 消費(fèi)者組(Consumer Group):多個(gè)消費(fèi)者實(shí)例共同組成一個(gè)組,同時(shí)消費(fèi)多個(gè)分區(qū)以實(shí)現(xiàn)高吞吐

  5. 重平衡(Rebalance)
  • 消費(fèi)者組內(nèi)某個(gè)消費(fèi)者實(shí)例掛掉后,其他消費(fèi)者實(shí)例自動(dòng)重新分配訂閱分區(qū)的過(guò)程
  • 重平衡是Kafka消費(fèi)者端實(shí)現(xiàn)高可用的重要手段

寫在最后

  • 第一:看完點(diǎn)贊,感謝您的認(rèn)可;
  • ...
  • 第二:隨手轉(zhuǎn)發(fā),分享知識(shí),讓更多人學(xué)習(xí)到;
  • ...
  • 第三:記得點(diǎn)關(guān)注,每天更新的?。?!
  • ...

Java程序員面試必備——kafka的專業(yè)術(shù)語(yǔ)

向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