Kafka在大數(shù)據(jù)技術(shù)生態(tài)當(dāng)中,以作為消息系統(tǒng)而聞名,面對活躍的流式數(shù)據(jù),提供高吞吐量的服務(wù),在實(shí)時(shí)大數(shù)據(jù)處理場景下,可以說是一大利器,國內(nèi)外大廠都有應(yīng)用。今天的大數(shù)據(jù)開發(fā)技術(shù)分享,我們就主要來講講Kafka框架的工作原理。
Kafka概述
官方定義,Kakfa是一個(gè)分布式的基于發(fā)布/訂閱模式的消息隊(duì)列,主要應(yīng)用于大數(shù)據(jù)的實(shí)時(shí)處理領(lǐng)域。
通常來說,消息隊(duì)列的模式分為兩種:
①點(diǎn)對點(diǎn)模式:消息生產(chǎn)者發(fā)送消息到消息隊(duì)列中,然后消息消費(fèi)者從隊(duì)列中取出并且消費(fèi)消息,消息被消費(fèi)后,隊(duì)列中不在存儲(chǔ)。
②發(fā)布/訂閱模式(一對多,消費(fèi)者消費(fèi)數(shù)據(jù)之后不會(huì)清除消息):消息生產(chǎn)者將消息發(fā)布到Topic中,同時(shí)有多個(gè)消息消費(fèi)者(訂閱)消費(fèi)該消息。
Kafka就是典型的發(fā)布/訂閱模式,更加適用于實(shí)時(shí)大數(shù)據(jù)場景下的消息服務(wù)。
Kafka基礎(chǔ)架構(gòu)
Kafka的基礎(chǔ)架構(gòu)主要有Broker、生產(chǎn)者、消費(fèi)者組構(gòu)成,當(dāng)前還包括ZooKeeper。
生產(chǎn)者負(fù)責(zé)發(fā)送消息,Broker負(fù)責(zé)緩沖消息,Broker中可以創(chuàng)建Topic,每個(gè)Topic又有Partition和Replication的概念。
消費(fèi)者組負(fù)責(zé)處理消息,同一個(gè)消費(fèi)者組的消費(fèi)者不能消費(fèi)同一個(gè)Partition中的數(shù)據(jù)。
消費(fèi)者組主要是提高消費(fèi)能力,比如之前是一個(gè)消費(fèi)者消費(fèi)100條數(shù)據(jù),現(xiàn)在是2個(gè)消費(fèi)者消費(fèi)100條數(shù)據(jù),可以提高消費(fèi)能力。
所以消費(fèi)者組的消費(fèi)者的個(gè)數(shù)要小于Partition的個(gè)數(shù),不然就會(huì)有消費(fèi)者沒有Partition可以消費(fèi),造成資源的浪費(fèi)。
注意:不同消費(fèi)者組的消費(fèi)者是可以消費(fèi)相同的Partition數(shù)據(jù)。
Kakfa如果要組件集群,則只需要注冊到一個(gè)ZooKeeper中就可以了,ZooKeeper中還保留消息消費(fèi)的進(jìn)度或者說偏移量或者消費(fèi)位置:
0.9之前的版本偏移量存儲(chǔ)在ZooKeeper。
0.9之后的版本偏移量存儲(chǔ)在Kafka中。Kafka定義了一個(gè)系統(tǒng)Topic,專用用來存儲(chǔ)偏移量的數(shù)據(jù)。這樣做主要是考慮到頻繁更改偏移量,對ZooKeeper的壓力較大,而且Kafka本身自己的處理也較復(fù)雜。
Kafka不能保證消息的全局有序,只能保證消息在Partition內(nèi)有序,因?yàn)橄M(fèi)者消費(fèi)消息是在不同的Partition中隨機(jī)的。
Kafka工作流程
Kafka中的消息是以Topic進(jìn)行分類的,生產(chǎn)者生成消息、消費(fèi)者消費(fèi)消息都面向Topic。
Topic是一個(gè)邏輯上的概念,而Partition是物理上的概念。每個(gè)Partition又有副本的概念。
每個(gè)Partition對應(yīng)于一個(gè)Log文件,該Log文件中存儲(chǔ)的就是生產(chǎn)者生成的數(shù)據(jù),生產(chǎn)者生成的數(shù)據(jù)會(huì)不斷的追加到該Log的文件末端。
且每條數(shù)據(jù)都有自己的Offset,消費(fèi)者都會(huì)實(shí)時(shí)記錄自己消費(fèi)到了那個(gè)Offset,以便出錯(cuò)的時(shí)候從上次的位置繼續(xù)消費(fèi),這個(gè)Offset就保存在Index文件中。
Kafka的Offset是分區(qū)內(nèi)有序的,但是在不同分區(qū)中是無順序的,Kafka不保證數(shù)據(jù)的全局有序。
關(guān)于大數(shù)據(jù)開發(fā),Kafka工作原理入門,以上就為大家做了簡單的介紹了。Kafka在大數(shù)據(jù)技術(shù)生態(tài)當(dāng)中,普及度是非常高的,尤其是擁有豐富數(shù)據(jù)資源的企業(yè),更加青睞于使用kafka。
責(zé)任編輯人:CC
-
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8893瀏覽量
137461 -
kafka
+關(guān)注
關(guān)注
0文章
51瀏覽量
5224
發(fā)布評論請先 登錄
相關(guān)推薦
評論