溫馨提示×

溫馨提示×

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

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

Kafka簡介、基本原理、執(zhí)行流程與使用場景

發(fā)布時(shí)間:2020-06-19 15:13:56 來源:網(wǎng)絡(luò) 閱讀:662 作者:Java月亮呀 欄目:編程語言

一、簡介

Apache Kafka是分布式發(fā)布-訂閱消息系統(tǒng),在 kafka官網(wǎng)上對 kafka 的定義:一個分布式發(fā)布-訂閱消息傳遞系統(tǒng)。 它最初由LinkedIn公司開發(fā),Linkedin于2010年貢獻(xiàn)給了Apache基金會并成為頂級開源項(xiàng)目。Kafka是一種快速、可擴(kuò)展的、設(shè)計(jì)內(nèi)在就是分布式的,分區(qū)的和可復(fù)制的提交日志服務(wù)。

幾種分布式系統(tǒng)消息系統(tǒng)的對比:Kafka簡介、基本原理、執(zhí)行流程與使用場景

##二、Kafka基本架構(gòu)
它的架構(gòu)包括以下組件:

  • 話題(Topic):是特定類型的消息流。消息是字節(jié)的有效負(fù)載(Payload),話題是消息的分類名或種子(Feed)名;

  • 生產(chǎn)者(Producer):是能夠發(fā)布消息到話題的任何對象;

  • 服務(wù)代理(Broker):已發(fā)布的消息保存在一組服務(wù)器中,它們被稱為代理(Broker)或Kafka集群;

  • 消費(fèi)者(Consumer):可以訂閱一個或多個話題,并從Broker拉數(shù)據(jù),從而消費(fèi)這些已發(fā)布的消息;
    Kafka簡介、基本原理、執(zhí)行流程與使用場景

上圖中可以看出,生產(chǎn)者將數(shù)據(jù)發(fā)送到Broker代理,Broker代理有多個話題topic,消費(fèi)者從Broker獲取數(shù)據(jù)。

三、基本原理

我們將消息的發(fā)布(publish)稱作 producer,將消息的訂閱(subscribe)表述為 consumer,將中間的存儲陣列稱作 broker(代理),這樣就可以大致描繪出這樣一個場面:Kafka簡介、基本原理、執(zhí)行流程與使用場景

生產(chǎn)者將數(shù)據(jù)生產(chǎn)出來,交給 broker 進(jìn)行存儲,消費(fèi)者需要消費(fèi)數(shù)據(jù)了,就從broker中去拿出數(shù)據(jù)來,然后完成一系列對數(shù)據(jù)的處理操作。

乍一看返也太簡單了,不是說了它是分布式嗎,難道把 producer、 broker 和 consumer 放在三臺不同的機(jī)器上就算是分布式了嗎???kafka 官方給出的圖:Kafka簡介、基本原理、執(zhí)行流程與使用場景

多個 broker 協(xié)同合作,producer 和 consumer 部署在各個業(yè)務(wù)邏輯中被頻繁的調(diào)用,三者通過 zookeeper管理協(xié)調(diào)請求和轉(zhuǎn)發(fā)。這樣一個高性能的分布式消息發(fā)布訂閱系統(tǒng)就完成了。

圖上有個細(xì)節(jié)需要注意,producer 到 broker 的過程是 push,也就是有數(shù)據(jù)就推送到 broker,而 consumer 到 broker 的過程是 pull,是通過 consumer 主動去拉數(shù)據(jù)的,而不是 broker 把數(shù)據(jù)主懂發(fā)送到 consumer 端的。

四、Zookeeper在kafka的作用

上述,提到了Zookeeper,那么Zookeeper在kafka的作用是什么?

(1)無論是kafka集群,還是producer和consumer都依賴于zookeeper來保證系統(tǒng)可用性集群保存一些meta信息。

(2)Kafka使用zookeeper作為其分布式協(xié)調(diào)框架,很好的將消息生產(chǎn)、消息存儲、消息消費(fèi)的過程結(jié)合在一起。

(3)同時(shí)借助zookeeper,kafka能夠生產(chǎn)者、消費(fèi)者和broker在內(nèi)的所以組件在無狀態(tài)的情況下,建立起生產(chǎn)者和消費(fèi)者的訂閱關(guān)系,并實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者的負(fù)載均衡。

五、執(zhí)行流程

首先看一下如下的過程:Kafka簡介、基本原理、執(zhí)行流程與使用場景

我們看上面的圖,我們把 broker 的數(shù)量減少,叧有一臺。現(xiàn)在假設(shè)我們按照上圖進(jìn)行部署:

(1)Server-1 broker 其實(shí)就是 kafka 的 server,因?yàn)?producer 和 consumer 都要去還它。 Broker 主要還是做存儲用。

(2)Server-2 是 zookeeper 的 server 端,它維持了一張表,記錄了各個節(jié)點(diǎn)的 IP、端口等信息。

(3)Server-3、 4、 5 他們的共同之處就是都配置了 zkClient,更明確的說,就是運(yùn)行前必須配置 zookeeper的地址,道理也很簡單,這之間的連接都是需要 zookeeper 來進(jìn)行分發(fā)的。

(4)Server-1 和 Server-2 的關(guān)系,他們可以放在一臺機(jī)器上,也可以分開放,zookeeper 也可以配集群。目的是防止某一臺掛了。

簡單說下整個系統(tǒng)運(yùn)行的順序:

  • 啟動zookeeper 的 server

  • 啟動kafka 的 server

  • Producer 如果生產(chǎn)了數(shù)據(jù),會先通過 zookeeper 找到 broker,然后將數(shù)據(jù)存放到 broker

  • Consumer 如果要消費(fèi)數(shù)據(jù),會先通過 zookeeper 找對應(yīng)的 broker,然后消費(fèi)。

六、Kafka的特性

(1)高吞吐量、低延遲:kafka每秒可以處理幾十萬條消息,它的延遲最低只有幾毫秒,每個topic可以分多個partition, consumer group 對partition進(jìn)行consume操作;

(2)可擴(kuò)展性:kafka集群支持熱擴(kuò)展;

(3)持久性、可靠性:消息被持久化到本地磁盤,并且支持?jǐn)?shù)據(jù)備份防止數(shù)據(jù)丟失;

(4)容錯性:允許集群中節(jié)點(diǎn)失敗(若副本數(shù)量為n,則允許n-1個節(jié)點(diǎn)失?。?;

(5)高并發(fā):支持?jǐn)?shù)千個客戶端同時(shí)讀寫;

(6)支持實(shí)時(shí)在線處理和離線處理:可以使用Storm這種實(shí)時(shí)流處理系統(tǒng)對消息進(jìn)行實(shí)時(shí)進(jìn)行處理,同時(shí)還可以使用Hadoop這種批處理系統(tǒng)進(jìn)行離線處理;

七、Kafka的使用場景

(1)日志收集:一個公司可以用Kafka可以收集各種服務(wù)的log,通過kafka以統(tǒng)一接口服務(wù)的方式開放給各種consumer,例如Hadoop、Hbase、Solr等;

(2)消息系統(tǒng):解耦和生產(chǎn)者和消費(fèi)者、緩存消息等;

(3)用戶活動跟蹤:Kafka經(jīng)常被用來記錄web用戶或者app用戶的各種活動,如瀏覽網(wǎng)頁、搜索、點(diǎn)擊等活動,這些活動信息被各個服務(wù)器發(fā)布到kafka的topic中,然后訂閱者通過訂閱這些topic來做實(shí)時(shí)的監(jiān)控分析,或者裝載到Hadoop、數(shù)據(jù)倉庫中做離線分析和挖掘;

(4)運(yùn)營指標(biāo):Kafka也經(jīng)常用來記錄運(yùn)營監(jiān)控?cái)?shù)據(jù)。包括收集各種分布式應(yīng)用的數(shù)據(jù),生產(chǎn)各種操作的集中反饋,比如報(bào)警和報(bào)告;

(5)流式處理:比如spark streaming和storm;

(6)事件源;

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI