柚子快報(bào)激活碼778899分享:Kafka之基本概念
柚子快報(bào)激活碼778899分享:Kafka之基本概念
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)。
下一篇:Kafka之生產(chǎn)者
柚子快報(bào)激活碼778899分享:Kafka之基本概念
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。