0. Kafka是什么
Kafka是一個(gè)開源的分布式流處理平臺和消息隊(duì)列系統(tǒng)。
Kafka是一個(gè)值得深入學(xué)習(xí)的開源中間件,其中涉及的概念有很多,今天就來梳理一下,這些概念到底都是什么。
1. 基本概念
1.1 生產(chǎn)者(Producer)
Producers are those client applications that publish (write) events to Kafka
生產(chǎn)者就是那些發(fā)布/寫事件到Kafka的客戶端應(yīng)用。
1.2 消費(fèi)者(Consumer)
consumers are those that subscribe to (read and process) these events.
消費(fèi)者是那些訂閱(讀和處理)這些事件的應(yīng)用。
1.3 服務(wù)代理節(jié)點(diǎn)(Broker)
Kafka is run as a cluster of one or more servers that can span multiple datacenters or cloud regions. Some of these servers form the storage layer, called the brokers.
Kafka以一個(gè)或多個(gè)服務(wù)端組成的集群方式運(yùn)行,這樣可以使其分成多個(gè)數(shù)據(jù)中心或者云區(qū)域。一些來自存儲層的server被稱之為broker。
對于 Kafka 而言, Broker 可以簡單地看作一個(gè)獨(dú)立的 Kafka 服務(wù)節(jié)點(diǎn)或 Kafka服務(wù)實(shí)例。大多數(shù)情況下也可以將 Broker看作一臺 Kafka服務(wù)器,前提是這 臺服務(wù)器上只部署了一個(gè) Kafka 實(shí)例。一個(gè)或多個(gè) Broker 組成了 一個(gè) Kafka 集群 。一般而言, 我們更習(xí)慣使用首字母小寫的 broker 來表示服務(wù)代理節(jié)點(diǎn) 。
1.4 控制器(Controller)
在 Kafka 集群中會有一個(gè)或多個(gè) broker,其中有一個(gè) broker 會被選舉為控制器( Kafka Controller),它負(fù)責(zé)管理整個(gè)集群中所有分區(qū)和副本的狀態(tài)。當(dāng)某個(gè)分區(qū)的 leader 副本出現(xiàn)故 障時(shí),由控制器負(fù)責(zé)為該分區(qū)選舉新的 leader副本。當(dāng)檢測到某個(gè)分區(qū)的 ISR集合發(fā)生變化時(shí), 由控制器負(fù)責(zé)通知所有 broker更新其元數(shù)據(jù)信息。
具備控制器身份的broker需要比其他普通的broker多一份職責(zé):
-
- 監(jiān)聽分區(qū)相關(guān)變化。
- a. 分區(qū)重新分配。(reassignment)
- b. ISR集合變更。
- c. 副本選舉。
- 監(jiān)聽分區(qū)相關(guān)變化。
-
- 監(jiān)聽主題相關(guān)變化。
- a.topic的增加、刪除等。
- 監(jiān)聽主題相關(guān)變化。
-
- 監(jiān)聽broker相關(guān)變化。
- a. broker的增加與減少。
- 監(jiān)聽broker相關(guān)變化。
-
- 啟動并管理分區(qū)狀態(tài)機(jī)和副本狀態(tài)機(jī)。
-
- 更新元數(shù)據(jù)信息。
1.5 主題 Topic
在Kafka中,Topic(主題)是消息發(fā)布和訂閱的基本單位。它是一個(gè)邏輯上的概念,用于組織和分類消息流。一個(gè)Topic可以被看作是一個(gè)具有相同特性的消息類別或主題。
每個(gè)Topic都有一個(gè)唯一的名稱,用于在Kafka集群中進(jìn)行標(biāo)識和訪問。生產(chǎn)者(Producers)將消息發(fā)布到特定的Topic,而消費(fèi)者(Consumers)則訂閱感興趣的Topic以消費(fèi)其中的消息。
Kafka的Topic可以被分成多個(gè)分區(qū)(Partitions),每個(gè)分區(qū)都是有序且持久化的消息日志。分區(qū)是Topic在物理上的分割,用于實(shí)現(xiàn)數(shù)據(jù)的橫向擴(kuò)展和并行處理。每個(gè)分區(qū)可以在不同的服務(wù)器上進(jìn)行復(fù)制,以提供數(shù)據(jù)冗余和故障恢復(fù)機(jī)制。
1.6 分區(qū)(Partitions)
在Kafka中,分區(qū)(Partitions)是Topic的物理單元,用于水平劃分和存儲數(shù)據(jù)。每個(gè)Topic可以被分成一個(gè)或多個(gè)分區(qū),每個(gè)分區(qū)都是一個(gè)有序、不可變的消息日志。
分區(qū)leader的選舉由控制器負(fù)責(zé)具體實(shí)施。
1.7 副本(replica)
在Kafka中,每個(gè)分區(qū)都可以配置多個(gè)分區(qū)副本(Partition Replicas)。分區(qū)副本是分布在不同節(jié)點(diǎn)上的數(shù)據(jù)備份,用于提供數(shù)據(jù)冗余和故障容錯(cuò)。
以下是關(guān)于Kafka分區(qū)副本的一些關(guān)鍵概念和特性:
- 1.復(fù)制機(jī)制:每個(gè)分區(qū)可以配置一個(gè)或多個(gè)副本。副本之間通過復(fù)制機(jī)制保持?jǐn)?shù)據(jù)的一致性。當(dāng)生產(chǎn)者發(fā)送消息時(shí),它們將被寫入主副本(Leader Replica),而主副本會將消息復(fù)制到其他副本(Follower Replicas)。
- 2.主副本和從副本:每個(gè)分區(qū)只有一個(gè)主副本,它負(fù)責(zé)處理所有的讀寫請求。其他副本是從副本,它們與主副本保持同步,并提供備份數(shù)據(jù)以供故障恢復(fù)。
- 3.數(shù)據(jù)復(fù)制和同步:Kafka使用復(fù)制日志(Replication Log)的方式進(jìn)行數(shù)據(jù)復(fù)制和同步。主副本將消息寫入日志,并將日志傳輸給從副本,從副本按順序應(yīng)用這些消息以保持?jǐn)?shù)據(jù)的一致性。
- 4.容錯(cuò)和可用性:分區(qū)副本提供了故障容錯(cuò)和數(shù)據(jù)冗余的機(jī)制。如果主副本發(fā)生故障,Kafka會自動選擇一個(gè)從副本作為新的主副本,以確保分區(qū)的可用性和持續(xù)的數(shù)據(jù)寫入。
- 5.負(fù)載均衡:分區(qū)副本的配置可以實(shí)現(xiàn)負(fù)載均衡。Kafka會將分區(qū)副本盡可能分布在不同的節(jié)點(diǎn)上,以平衡數(shù)據(jù)的讀寫負(fù)載和提供更好的性能。
- 6.ISR(In-Sync Replicas):ISR是指與主副本保持同步的副本集合。只有在ISR中的副本才能成為新的主副本。如果副本與主副本的同步進(jìn)度滯后,它將被移出ISR,直到追趕上同步進(jìn)度。
分區(qū)副本在Kafka中是實(shí)現(xiàn)高可用性、數(shù)據(jù)冗余和故障容錯(cuò)的關(guān)鍵機(jī)制。它們提供了數(shù)據(jù)的持久性和可用性保證,以及在節(jié)點(diǎn)故障時(shí)的自動故障轉(zhuǎn)移。
1.8 Consumer Group(消費(fèi)者組)
消費(fèi)者可以組成一個(gè)消費(fèi)者組。每個(gè)消費(fèi)者組可以訂閱一個(gè)或多個(gè)主題,并共享消息的處理負(fù)載。Kafka 會將消息廣播給消費(fèi)者組中的所有消費(fèi)者。
1.9 Offset(偏移量)
偏移量是消息在分區(qū)中的唯一標(biāo)識符。消費(fèi)者可以通過指定偏移量來讀取分區(qū)中的消息。Kafka 會跟蹤每個(gè)消費(fèi)者在每個(gè)分區(qū)中的偏移量,并確保消費(fèi)者可以繼續(xù)從上次離開的位置讀取消息。
1.10 Rebalance
Kafka 的 Rebalance 是指在消費(fèi)者組中增加或減少消費(fèi)者時(shí),自動重新分配分區(qū)的過程。當(dāng)消費(fèi)者加入或離開消費(fèi)者組時(shí),Kafka 會自動進(jìn)行 Rebalance 操作,以確保每個(gè)消費(fèi)者在消費(fèi)者組中處理盡可能相等的負(fù)載。
三個(gè)觸發(fā)Rebalance的情況:
- 1.消費(fèi)者組成熟數(shù)量發(fā)生變化
- 2.訂閱的主題數(shù)量發(fā)生變化
- 3.訂閱的主題的分區(qū)數(shù)量發(fā)生變化
1.11 Coordinator
新版的消費(fèi)者客戶端對此進(jìn)行了重新設(shè)計(jì) ,將全部消費(fèi)組分成多個(gè)子集 , 每個(gè)消費(fèi)組的子 集在服務(wù)端對應(yīng)一個(gè) GroupCoordinator 對其進(jìn)行管理,GroupCoordinator是Kafka服務(wù)端中用于管理消費(fèi)組的組件。
而消費(fèi)者客戶端中的 ConsumerCoordinator組件負(fù)責(zé)與 GroupCoordinator進(jìn)行交互 。
1.12 LEO(Log end offset)
Leo 是指副本日志的當(dāng)前末尾偏移量。它表示副本已經(jīng)成功復(fù)制的消息的最高偏移量。所有新的消息都將追加到 Leo 之后。Leo 用于確定要從哪個(gè)偏移量開始復(fù)制消息。文章來源:http://www.zghlxwxcb.cn/news/detail-836353.html
1.13 HW(High Watermark)
HW 是指副本的高水位標(biāo)記。它表示副本已經(jīng)成功應(yīng)用到消費(fèi)者的最高偏移量。也就是說,消費(fèi)者可以確保已經(jīng)消費(fèi)并處理了 HW 之前的所有消息。HW 用于跟蹤消費(fèi)者的進(jìn)度,以及確定哪些消息可以被安全地刪除。文章來源地址http://www.zghlxwxcb.cn/news/detail-836353.html
到了這里,關(guān)于深入學(xué)習(xí)Kafka之概念解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!