在互聯(lián)網(wǎng)中,我們常常講究著唯快不破,相信不少人都有這樣的經(jīng)歷,明明一個非常簡單的需求,但卻要修改非常多的系統(tǒng),導(dǎo)致開發(fā)效率低下,從而不停的加班。一個好的程序員,一定要學(xué)會設(shè)計出好的架構(gòu),寫出優(yōu)雅的代碼,而好的架構(gòu),往往是各個系統(tǒng)低耦合的,消息隊列,正是解耦的一個神器。
消息隊列背景
我們舉一個簡單的例子,在我們的系統(tǒng)設(shè)計之初,所有的系統(tǒng)都是非常的簡單,我們以電商系統(tǒng)為例,一開始我們可能只需要非常簡單的一個web頁面,然后調(diào)用成單系統(tǒng),緊接著扣減庫存,最后存到db即可。

到后面,隨著業(yè)務(wù)的發(fā)展,系統(tǒng)變得越來復(fù)雜,可能我們每次交易,還要通知搜索系統(tǒng),推薦系統(tǒng),廣告結(jié)算系統(tǒng),商家后臺等等等,我們的系統(tǒng)就會變得非常復(fù)雜。

本來一次非常交易操作,我們卻要通知非常多個調(diào)用方,一旦任何一方調(diào)用失敗,我們是否需要去重試?同時,有些操作非常的重,需要消耗大量的時間,本來用戶都要下單給錢了,因為調(diào)用多個系統(tǒng)導(dǎo)致耗時過長用戶下單失敗,就非常容易造成客戶的流失。
為了解決這個問題,我們引入了消息隊列,讓消息隊列去通知其他系統(tǒng),而下單仍然是下單操作。

交易系統(tǒng)只要在原來的基礎(chǔ)上,把對應(yīng)的信息寫到消息隊列里面,再有消息隊列去干剩下的事情。這樣,我們就能保持原有的交易流程上的簡潔。而我們今天的主角Kafka正是常用的消息隊列!
Kafka的作用
- Kafka最被大家熟知的運(yùn)用場景,便是消息隊列,也稱消息中間件,消息中間件的主要優(yōu)點有解耦、削峰、異步擴(kuò)展性等等,并且Kafka還能保證消息是順序消費(fèi)。
- 存儲系統(tǒng),因為Kafka會將數(shù)據(jù)寫到磁盤,所以不用擔(dān)心數(shù)據(jù)斷電丟失,有時候,我們也將Kafka作為存儲系統(tǒng)來使用。同時,Kafka天生的持久化與多機(jī)副本機(jī)制,讓數(shù)據(jù)存儲更加可靠與可用。
- 流式處理平臺,Kafka提供非常多的api,并且式非常可靠的數(shù)據(jù)來源,可以結(jié)合spark等開源框架進(jìn)行流式計算。
Kafka的體系架構(gòu)
Kafka的體系架構(gòu)也比較簡單,一個典型的卡夫卡體系包括若干消息的生產(chǎn)者,若干消息的消費(fèi)者,若干個Broker以及一個Zookeeper集群,如下圖所示,其中,zk集群主要用來進(jìn)行集群元數(shù)據(jù)的管理以及控制器的選舉等操作。

總結(jié)
今天我們對Kafka的初識就到這里,作為一個最流行的消息隊列框架之一,Kafka有非常多值得學(xué)習(xí)的架構(gòu)知識,歡迎大家關(guān)注我,共同學(xué)習(xí),共同進(jìn)步。大家的支持是我繼續(xù)嘮嗑的動力。同名公眾號(沙茶敏碎碎念)