Apache Kafka是分布式發(fā)布-訂閱消息系統(tǒng),在 kafka官網(wǎng)上對(duì) kafka 的定義:一個(gè)分布式發(fā)布-訂閱消息傳遞系統(tǒng)。 它最初由LinkedIn公司開發(fā),Linkedin于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級(jí)開源項(xiàng)目。Kafka是一種快速、可擴(kuò)展的、設(shè)計(jì)內(nèi)在就是分布式的,分區(qū)的和可復(fù)制的提交日志服務(wù)。
幾種分布式系統(tǒng)消息系統(tǒng)的對(duì)比:
##二、Kafka基本架構(gòu)
它的架構(gòu)包括以下組件:
話題(Topic):是特定類型的消息流。消息是字節(jié)的有效負(fù)載(Payload),話題是消息的分類名或種子(Feed)名;
生產(chǎn)者(Producer):是能夠發(fā)布消息到話題的任何對(duì)象;
服務(wù)代理(Broker):已發(fā)布的消息保存在一組服務(wù)器中,它們被稱為代理(Broker)或Kafka集群;
上圖中可以看出,生產(chǎn)者將數(shù)據(jù)發(fā)送到Broker代理,Broker代理有多個(gè)話題topic,消費(fèi)者從Broker獲取數(shù)據(jù)。
我們將消息的發(fā)布(publish)稱作 producer,將消息的訂閱(subscribe)表述為 consumer,將中間的存儲(chǔ)陣列稱作 broker(代理),這樣就可以大致描繪出這樣一個(gè)場(chǎng)面:
生產(chǎn)者將數(shù)據(jù)生產(chǎn)出來,交給 broker 進(jìn)行存儲(chǔ),消費(fèi)者需要消費(fèi)數(shù)據(jù)了,就從broker中去拿出數(shù)據(jù)來,然后完成一系列對(duì)數(shù)據(jù)的處理操作。
乍一看返也太簡(jiǎn)單了,不是說了它是分布式嗎,難道把 producer、 broker 和 consumer 放在三臺(tái)不同的機(jī)器上就算是分布式了嗎???kafka 官方給出的圖:
多個(gè) broker 協(xié)同合作,producer 和 consumer 部署在各個(gè)業(yè)務(wù)邏輯中被頻繁的調(diào)用,三者通過 zookeeper管理協(xié)調(diào)請(qǐng)求和轉(zhuǎn)發(fā)。這樣一個(gè)高性能的分布式消息發(fā)布訂閱系統(tǒng)就完成了。
圖上有個(gè)細(xì)節(jié)需要注意,producer 到 broker 的過程是 push,也就是有數(shù)據(jù)就推送到 broker,而 consumer 到 broker 的過程是 pull,是通過 consumer 主動(dòng)去拉數(shù)據(jù)的,而不是 broker 把數(shù)據(jù)主懂發(fā)送到 consumer 端的。
上述,提到了Zookeeper,那么Zookeeper在kafka的作用是什么?
(1)無論是kafka集群,還是producer和consumer都依賴于zookeeper來保證系統(tǒng)可用性集群保存一些meta信息。
(2)Kafka使用zookeeper作為其分布式協(xié)調(diào)框架,很好的將消息生產(chǎn)、消息存儲(chǔ)、消息消費(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ù)載均衡。
首先看一下如下的過程:
我們看上面的圖,我們把 broker 的數(shù)量減少,叧有一臺(tái)?,F(xiàn)在假設(shè)我們按照上圖進(jìn)行部署:
(1)Server-1 broker 其實(shí)就是 kafka 的 server,因?yàn)?producer 和 consumer 都要去還它。 Broker 主要還是做存儲(chǔ)用。
(2)Server-2 是 zookeeper 的 server 端,它維持了一張表,記錄了各個(gè)節(jié)點(diǎn)的 IP、端口等信息。
(3)Server-3、 4、 5 他們的共同之處就是都配置了 zkClient,更明確的說,就是運(yùn)行前必須配置 zookeeper的地址,道理也很簡(jiǎn)單,這之間的連接都是需要 zookeeper 來進(jìn)行分發(fā)的。
(4)Server-1 和 Server-2 的關(guān)系,他們可以放在一臺(tái)機(jī)器上,也可以分開放,zookeeper 也可以配集群。目的是防止某一臺(tái)掛了。
簡(jiǎn)單說下整個(gè)系統(tǒng)運(yùn)行的順序:
啟動(dòng)zookeeper 的 server
啟動(dòng)kafka 的 server
Producer 如果生產(chǎn)了數(shù)據(jù),會(huì)先通過 zookeeper 找到 broker,然后將數(shù)據(jù)存放到 broker
(1)高吞吐量、低延遲:kafka每秒可以處理幾十萬條消息,它的延遲最低只有幾毫秒,每個(gè)topic可以分多個(gè)partition, consumer group 對(duì)partition進(jìn)行consume操作;
(2)可擴(kuò)展性:kafka集群支持熱擴(kuò)展;
(3)持久性、可靠性:消息被持久化到本地磁盤,并且支持?jǐn)?shù)據(jù)備份防止數(shù)據(jù)丟失;
(4)容錯(cuò)性:允許集群中節(jié)點(diǎn)失?。ㄈ舾北緮?shù)量為n,則允許n-1個(gè)節(jié)點(diǎn)失敗);
(5)高并發(fā):支持?jǐn)?shù)千個(gè)客戶端同時(shí)讀寫;
(6)支持實(shí)時(shí)在線處理和離線處理:可以使用Storm這種實(shí)時(shí)流處理系統(tǒng)對(duì)消息進(jìn)行實(shí)時(shí)進(jìn)行處理,同時(shí)還可以使用Hadoop這種批處理系統(tǒng)進(jìn)行離線處理;
(1)日志收集:一個(gè)公司可以用Kafka可以收集各種服務(wù)的log,通過kafka以統(tǒng)一接口服務(wù)的方式開放給各種consumer,例如Hadoop、Hbase、Solr等;
(2)消息系統(tǒng):解耦和生產(chǎn)者和消費(fèi)者、緩存消息等;
(3)用戶活動(dòng)跟蹤:Kafka經(jīng)常被用來記錄web用戶或者app用戶的各種活動(dòng),如瀏覽網(wǎng)頁、搜索、點(diǎn)擊等活動(dòng),這些活動(dòng)信息被各個(gè)服務(wù)器發(fā)布到kafka的topic中,然后訂閱者通過訂閱這些topic來做實(shí)時(shí)的監(jiān)控分析,或者裝載到Hadoop、數(shù)據(jù)倉(cāng)庫(kù)中做離線分析和挖掘;
(4)運(yùn)營(yíng)指標(biāo):Kafka也經(jīng)常用來記錄運(yùn)營(yíng)監(jiān)控?cái)?shù)據(jù)。包括收集各種分布式應(yīng)用的數(shù)據(jù),生產(chǎn)各種操作的集中反饋,比如報(bào)警和報(bào)告;
(5)流式處理:比如spark streaming和storm;
(6)事件源;
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。
分享名稱:Kafka簡(jiǎn)介、基本原理、執(zhí)行流程與使用場(chǎng)景-創(chuàng)新互聯(lián)
URL標(biāo)題:http://aaarwkj.com/article34/pjjpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、商城網(wǎng)站、虛擬主機(jī)、Google、網(wǎng)站策劃、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容