東莞企業(yè)網(wǎng)站推廣哪里好網(wǎng)絡(luò)游戲推廣員的真實(shí)經(jīng)歷
1、Kafka是什么?
Kafka是由Scala語言開發(fā)的一個多分區(qū)、多副本,基于Zookeeper集群協(xié)調(diào)的系統(tǒng)。
那這個所謂的系統(tǒng)又是什么系統(tǒng)呢?
回答這個問題要從發(fā)展的角度來看:起初Kafka的定位是分布式消息系統(tǒng)。但是目前它的定位是一個分布式流式處理平臺,用于實(shí)時數(shù)據(jù)集成和流數(shù)據(jù)處理。
2、Kafka都可以扮演哪些“角色”?
基于Kafka的發(fā)展和特性,它可以在我們的實(shí)際工作當(dāng)中扮演以下幾個“角色”:
- 消息系統(tǒng)
- 存儲系統(tǒng):將消息持久化到磁盤上。
- 流式處理平臺:可以集成多種流式處理框架(例如:SparkStream、Flink等),不但可以作為可靠的數(shù)據(jù)源,同時提供了一套完整的流處理類庫,例如:窗口、連接、交換和聚合等操作。
3、Kafka的體系架構(gòu)?
Kafka體系架構(gòu)包括:生產(chǎn)者(Producer)、消費(fèi)者(Consumer)、服務(wù)代理節(jié)點(diǎn)(Broker)、一個Zookeeper集群。
-
生產(chǎn)者(Producer)
作為消息的發(fā)送方。負(fù)責(zé)創(chuàng)建消息,并將消息發(fā)送給Broker。
-
消費(fèi)者(Consumer)
作為消息的接收方。負(fù)責(zé)連接Kafka并接收消息,進(jìn)而進(jìn)行相應(yīng)的邏輯處理。
-
代理服務(wù)節(jié)點(diǎn)(Broker)
可以看做一個Kafka實(shí)例,多個Broker組成一個Kafka集群。
-
Zookeeper集群
Zookeeper用來負(fù)責(zé)Kafka集群的元數(shù)據(jù)管理和控制器的選舉等操作。
讓我們進(jìn)一步來描述Producer、Consumer、Broker之間的關(guān)系以及作用:
Producer創(chuàng)建消息并將消息發(fā)送給Borker,Broker將接收到的消息存儲到本地的磁盤上,Consumer負(fù)責(zé)在Broker上訂閱并消費(fèi)消息。
4、主題、分區(qū)、副本
Kafka中有三個重要的概念,主題、分區(qū)和副本。它們之間的關(guān)系如下圖:
通過上圖我們可以得知:
1個主題對應(yīng)多個分區(qū);一個分區(qū)對應(yīng)多個副本;副本又分為一個leader副本和多個follower副本。
4.1、主題
- 主題是一個邏輯概念,我們可以把它當(dāng)做消息的分類。
- Producer發(fā)送消息的時候會指明該消息所屬的主題(即可以理解為Producer是將消息發(fā)送給了主題),一個消息只屬于一個主題。
4.2、分區(qū)
- 一個主題下會細(xì)分為多個分區(qū),每個分區(qū)對應(yīng)一個主題。
- 消息在分區(qū)中的以offset(偏移量)作為唯一標(biāo)識。
- Kafka通過offset來保證消息在分區(qū)中的順序。
- offset不能跨區(qū),所以我們說分區(qū)是有序的,而主題是無序。
- 分區(qū)可以分布在不同的broker上。
4.3、副本
-
一個分區(qū)會有多個副本,副本中的消息都是一致的(同一時刻可能會有不一致的情況)。
-
副本之間的關(guān)系是“一主多從”,即一個leader副本和多個follower副本。
- leader副本:負(fù)責(zé)消息的讀寫。
- follower副本:負(fù)責(zé)同步leader副本。
-
副本被分布到不同的broker上,leader副本掛掉了,會從follower副本中重新選舉出一個新的leader副本。
-
我們將分區(qū)中所有副本統(tǒng)稱為AR(Assigned Replicas)。其中一些與leader副本保持一定程度同步的副本(包括leader副本本身)統(tǒng)稱為ISR(In-Sync Replicas)。而另外一些相較于leader副本滯后很多的副本統(tǒng)稱為OSR(Out-of-Sync Replicas)。
由此可見,AR = ISR + OSR。正常情況下,所有follower副本都要與leader版本保持一定程度的同步,即AR = ISR,而OSR集合為空。
-
默認(rèn)情況下,leader副本只能從ISR中的副本中選舉出來。但是我們可以通過參數(shù)配置使得OSR中的副本也有機(jī)會被選舉為leader副本。
-
leader副本還負(fù)責(zé)所有follower副本滯后狀態(tài)的維護(hù)和跟蹤,即當(dāng)follower副本滯后較多的時候會將它從ISR中移動到OSR中,也會將OSR中追上leader副本的follower副本移動到ISR中。
-
特定偏移量HW和LEO。
- 針對分區(qū)有一個概念為高水位(High Watermark,縮寫HW),它是一個特定的消息偏移量(offset),消費(fèi)者只能接收到offset之前的消息
- ISR中的每個follower副本都維護(hù)一個自己的LEO(Log End Offset),它也是一個特定的消息偏移量(offset),即待寫入消息的偏移量。
- HW與LEO之間的關(guān)系,如下圖:
通過上圖我們可以得知:分區(qū)的HW是通過ISR中最小的LEO得出的。
4.4、如何避免Consumer宕機(jī)重啟后的消息丟失?
Consumer是通過拉(Pull)模式從服務(wù)端拉取消息的,同時會在Consumer端記錄下消費(fèi)的具體位置,當(dāng)Consumer宕機(jī)重啟后會根據(jù)之前記錄的消費(fèi)位置重新拉取需要的信息進(jìn)行消費(fèi)。