1江咳、Kafka快速入門秘籍:背景介紹逢净,應(yīng)用場景分析、核心架構(gòu)分析

一歼指、背景介紹

引言:其實這段背景汹胃,我們之前介紹RabbitMQ的時候,已經(jīng)說過了东臀,我們這里講kakfa的時候着饥,再把這一段給拿出來,再說明下惰赋。在講實戰(zhàn)前宰掉,我們還是有必要講解下理論的,理論為輔赁濒,實戰(zhàn)為主轨奄,在實戰(zhàn)的基礎(chǔ)上,再深入理解理論拒炎,底層原理挪拟,底層源碼。下篇文章或者視頻击你,我們將帶你看官網(wǎng)學(xué)習(xí)kafka環(huán)境搭建玉组、kafka基本用法谎柄、kafka的容錯性測試,在掌握知識的同時惯雳,還能順便學(xué)習(xí)下英文朝巫。

1)問題引入:

假設(shè)我們現(xiàn)在需要設(shè)計這樣一個用戶注冊系統(tǒng):用戶注冊完成后,需要給用戶發(fā)送激活郵件石景,開通用戶賬號劈猿,記錄用戶IP、用戶設(shè)備潮孽、時間等信息揪荣。

起初的設(shè)計:

2)但存在的問題是

由于多個系統(tǒng)強(qiáng)耦合在一起,用戶注冊響應(yīng)會非常慢往史,嚴(yán)重影響了用戶的體驗仗颈,當(dāng)流量大的時候,性能會更差怠堪。

3)引入消息中間件:

為了解決上述問題揽乱,我們引入消息中間件名眉,來實現(xiàn)系統(tǒng)的解耦粟矿,多個系統(tǒng)間通過消息中間件進(jìn)行異步通信,最終的設(shè)計圖如下:

即實現(xiàn)了系統(tǒng)解耦损拢,又提升了系統(tǒng)響應(yīng)的速度

4)消息中間件介紹:

消息中間件(Message Queue Middleware陌粹,簡稱MQ)又稱為消息隊列,是指利用高效可靠的消息傳遞機(jī)制進(jìn)行與平臺無關(guān)的數(shù)據(jù)交流福压,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的構(gòu)建掏秩。

2、應(yīng)用場景分析

1)異步通信

在很多時候荆姆,為了加快應(yīng)用系統(tǒng)整體運(yùn)轉(zhuǎn)速度蒙幻,并不需要立即響應(yīng)某些請求,消息中間件提供了異步處理機(jī)制胆筒,允許將一些請求信息放入消息中間件中邮破,但并不立即處理它,而是慢慢處理仆救。在有限資源下抒和,使用消息中間件能夠使系統(tǒng)性能從容倍增!

如:用戶注冊成功的郵件通知彤蔽;用戶購物下單的信息通知摧莽;大數(shù)據(jù)日志收集處理

2)削峰

以防突發(fā)劇增流量瞬間沖垮系統(tǒng),使用消息中間件可以支撐突發(fā)訪問壓力

3)業(yè)務(wù)系統(tǒng)解耦

系統(tǒng)間的耦合關(guān)系太強(qiáng)顿痪,會對系統(tǒng)的設(shè)計產(chǎn)生束縛镊辕,也會增加系統(tǒng)的復(fù)雜性油够,通過消息中間件可以更好的設(shè)計系統(tǒng),是一個系統(tǒng)完成指定的功能丑蛤,而不是將所有的功能融合在同一個系統(tǒng)中叠聋。

二、kafka簡介

Kafka作為一種消息中間件受裹,是一種分布式的碌补,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計目標(biāo)如下:

以時間復(fù)雜度為O(1)的方式提供消息持久化能力棉饶,即使對TB級以上數(shù)據(jù)也能保證常數(shù)時間的訪問性能

高吞吐率厦章。即使在非常廉價的商用機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸

支持Kafka Server間的消息分區(qū),及分布式消費(fèi)照藻,同時保證每個partition內(nèi)的消息順序傳輸

同時支持離線數(shù)據(jù)處理和實時數(shù)據(jù)處理

1袜啃、kafka架構(gòu)


名詞解釋:

Broker?

一個Kafka集群由一個或多個broker組成。搭建了kafka環(huán)境的服務(wù)器就可以稱為broker幸缕。

Topic?

Kafka集群上存儲的消息都有一個類別群发,這個類別被稱為topic。(使用者只需指定消息的topic发乔,即可生產(chǎn)或消費(fèi)數(shù)據(jù)而不必關(guān)心數(shù)據(jù)存于何處)Topic在邏輯上可以被認(rèn)為是一個queue熟妓。每條消費(fèi)都必須指定它的topic,可以簡單理解為必須指明把這條消息放進(jìn)哪個queue里栏尚,這與RabbitMQ就有點(diǎn)類似了起愈。

Partition?

為了使得Kafka的吞吐率可以水平擴(kuò)展,物理上又把topic分成一個或多個partition译仗,每個partition在物理上對應(yīng)一個文件夾抬虽,該文件夾下存儲這個partition的所有消息和索引文件。創(chuàng)建topic時可指定parition數(shù)量纵菌。我們實戰(zhàn)演示的時候阐污,會再次說明。

因為每條消息都被append到該partition中咱圆,是順序?qū)懘疟P笛辟,因此效率非常高(經(jīng)驗證,順序?qū)懘疟P效率比隨機(jī)寫內(nèi)存還要高闷堡,這是Kafka高吞吐率的一個很重要的保證)隘膘。

Producer?

負(fù)責(zé)發(fā)布消息到Kafka broker

Consumer?

消費(fèi)消息。每個consumer屬于一個特定的consumer group(可為每個consumer指定group name杠览,若不指定group name則屬于默認(rèn)的group)弯菊。同一topic的一條消息只能被同一個consumer group內(nèi)的一個consumer消費(fèi),但多個consumer group可同時消費(fèi)這一消息。

三管钳、kafka其它核心概念

1钦铁、消息存儲

很多傳統(tǒng)的message queue都會在消息被消費(fèi)完后將消息刪除,一方面避免重復(fù)消費(fèi)才漆,另一方面可以保證queue的長度比較少牛曹,提高效率。而Kafka集群會保留所有的消息醇滥,無論其被消費(fèi)與否黎比。當(dāng)然,因為磁盤限制鸳玩,不可能永久保留所有數(shù)據(jù)(實際上也沒必要)阅虫,因此Kafka提供兩種策略去刪除舊數(shù)據(jù)。一是基于時間不跟,二是基于partition文件大小颓帝。例如可以通過配置$KAFKA_HOME/config/server.properties,讓Kafka刪除一周前的數(shù)據(jù)窝革,也可通過配置讓Kafka在partition文件超過1GB時刪除舊數(shù)據(jù)购城。

2、Consumer Group

每一個consumer實例都屬于一個consumer group虐译,每一條消息只會被同一個consumer group里的一個consumer實例消費(fèi)瘪板。(不同consumer group可以同時消費(fèi)同一條消息)?

Kafka保證的是穩(wěn)定狀態(tài)下每一個consumer實例只會消費(fèi)某一個或多個特定partition的數(shù)據(jù),而某個partition的數(shù)據(jù)只會被某一個特定的consumer實例所消費(fèi)菱蔬。這樣設(shè)計的劣勢是無法讓同一個consumer group里的consumer均勻消費(fèi)數(shù)據(jù)篷帅,優(yōu)勢是每個consumer不用都跟大量的broker通信史侣,減少通信開銷拴泌,同時也降低了分配難度,實現(xiàn)也更簡單惊橱。另外蚪腐,因為同一個partition里的數(shù)據(jù)是有序的,這種設(shè)計可以保證每個partition里的數(shù)據(jù)也是有序被消費(fèi)税朴。

3回季、Consumer Rebalance

Kafka通過Zookeeper管理集群配置,在consumer group發(fā)生變化時(如:某個consumer因故障下線時)進(jìn)行rebalance正林。具體含義為:

如果某consumer group中consumer數(shù)量少于partition數(shù)量泡一,則至少有一個consumer會消費(fèi)多個partition的數(shù)據(jù),

如果consumer的數(shù)量與partition數(shù)量相同觅廓,則正好一個consumer消費(fèi)一個partition的數(shù)據(jù)鼻忠,

而如果consumer的數(shù)量多于partition的數(shù)量時,會有部分consumer無法消費(fèi)該topic下任何一條消息杈绸。

下篇文章帖蔓,就是實戰(zhàn)為主了:帶你閱讀官網(wǎng)完成基本使用矮瘟、容錯性測試

如果你覺得文章還可以,歡迎掃一下:

更多內(nèi)容塑娇,請關(guān)注:

頭條號:極客慧

更多資料分享澈侠,問題咨詢,可以入群討論:375412858


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埋酬,一起剝皮案震驚了整個濱河市哨啃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌写妥,老刑警劉巖棘催,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耳标,居然都是意外死亡醇坝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門次坡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呼猪,“玉大人,你說我怎么就攤上這事砸琅∷尉啵” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵症脂,是天一觀的道長谚赎。 經(jīng)常有香客問我,道長诱篷,這世上最難降的妖魔是什么壶唤? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮棕所,結(jié)果婚禮上闸盔,老公的妹妹穿的比我還像新娘。我一直安慰自己琳省,他們只是感情好迎吵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著针贬,像睡著了一般击费。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桦他,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天蔫巩,我揣著相機(jī)與錄音,去河邊找鬼。 笑死批幌,一個胖子當(dāng)著我的面吹牛础锐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荧缘,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼皆警,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了截粗?” 一聲冷哼從身側(cè)響起信姓,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绸罗,沒想到半個月后意推,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡珊蟀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年菊值,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片育灸。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腻窒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磅崭,到底是詐尸還是另有隱情儿子,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布砸喻,位于F島的核電站柔逼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏割岛。R本人自食惡果不足惜愉适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜂桶。 院中可真熱鬧儡毕,春花似錦也切、人聲如沸扑媚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疆股。三九已至,卻和暖如春倒槐,著一層夾襖步出監(jiān)牢的瞬間旬痹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留两残,地道東北人永毅。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像人弓,于是被迫代替她去往敵國和親沼死。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容