在我們?yōu)殂y行設(shè)計金融系統(tǒng)的時候谓苟,消息分發(fā)利器是個非常關(guān)鍵的環(huán)節(jié)棕叫。
消息分發(fā)處理主要做什么识颊?
銀行金融系統(tǒng)每天有大量的交易發(fā)生耿焊,這些交易很多需要進行實時的檢查與處理揪惦,比如一筆交易發(fā)生,這筆交易是否是欺詐交易搀别,這筆交易是否已經(jīng)達到限額了丹擎,相關(guān)用戶是否在黑名單中,交易結(jié)果聯(lián)動短信歇父、Email等渠道通知用戶……等等蒂培,也許一筆簡單的交易,就要與反欺詐系統(tǒng)榜苫、黑名單系統(tǒng)护戳、限額或授信管控系統(tǒng)、短信郵件系統(tǒng)進行通訊垂睬。
這還不是全部媳荒,銀行金融系統(tǒng)在進行運行時,如果出現(xiàn)了問題驹饺,需要日志及時定位問題钳枕;為了及時發(fā)現(xiàn)問題,要將處理結(jié)果實施發(fā)送監(jiān)控平臺赏壹;為了預(yù)防突發(fā)事件發(fā)生鱼炒,還需要備份系統(tǒng)做高可用處理。這就仍然需要與日志系統(tǒng)蝌借、監(jiān)控系統(tǒng)昔瞧、備份系統(tǒng)進行通訊。
最重要的是菩佑,上面這些處理必須在極短時間內(nèi)完成自晰,否則用戶就會感到有卡頓,影響體驗稍坯。
怎么解決這些問題呢酬荞?將交易處理相關(guān)的系統(tǒng)全部直連起來,似乎是個辦法:
但明顯不是一個好辦法瞧哟,你將面臨極高的后續(xù)維護成本:
于是袜蚕,消息分發(fā)處理的概念出現(xiàn)了,我們在各個系統(tǒng)之間搭建一個消息分發(fā)的總控系統(tǒng)绢涡,連接這個總控系統(tǒng)的主要有兩方:
1牲剃、消息供應(yīng)方(Producer):他們會產(chǎn)生消息,并將消息送給消息分發(fā)系統(tǒng)雄可。
2凿傅、消息消費方(Comsumer):他們需要最新的消息以進行自身功能的處理缠犀,他們會從消息分發(fā)系統(tǒng)拿消息。
而消息分發(fā)系統(tǒng)就在中間聪舒,起到消息中介(Message Broker)的作用辨液。
kafka系統(tǒng)就是一個消息中介,從kafka的官網(wǎng)可以找到kafka的官方介紹:
可以看出箱残,介紹中也提到kafka很像是一個消息隊列或者企業(yè)級消息分發(fā)系統(tǒng)滔迈。當(dāng)然它不同于一般的消息隊列系統(tǒng),它的并發(fā)處理能力很強大被辑,同時燎悍,通過分布式架構(gòu)可以很靈活的增加處理能力。
上圖展示了一個最簡單的kafka分布式架構(gòu)的情況盼理,通過分布式架構(gòu)谈山,kafka集群可以橫向擴容很多的broker,以增加自己的并發(fā)處理能力宏怔。集群通過Zookeeper或其它技術(shù)進行分布式調(diào)度(Zookeeper簡單說就是分布式系統(tǒng)的一個指揮奏路,它會對哪個broker做什么做好指揮,確保所有的broker可以協(xié)同工作臊诊。以后有機會單獨寫文章講解)鸽粉。
我們可以更加細(xì)致的看一下kafka的架構(gòu):
上方的Producers會產(chǎn)生很多的消息和信息送給kafka。
kafka會把這些消息存儲下來抓艳。
下方的Consumers會從kafka獲取它所需要的數(shù)據(jù)触机,然后自行處理,比如Consumers可能會降消息存儲到hadoop壶硅、cassandra、Base销斟。
右側(cè)是流處理App庐椒。首先“流”是什么?“流”簡單來說蚂踊,就是不間斷的一系列變化的數(shù)據(jù)或者消息约谈。kafka可以很好的支持流處理(支持很多“流API”),一些流處理框架下的App可以接入kafka犁钟,并且可以實時的獲取變化的數(shù)據(jù)和消息棱诱,對消息進行處理后可以立刻存回kafka,等待其它Consumers調(diào)用涝动。
最后是左側(cè)的connectors迈勋,通過它,你可以將kafka與不同的數(shù)據(jù)庫或App聯(lián)通醋粟,實現(xiàn)海量數(shù)據(jù)導(dǎo)入kafka或者從kafka導(dǎo)出靡菇。
總結(jié)一下重归,簡單說,kafka是一個企業(yè)級的消息分發(fā)處理系統(tǒng)厦凤,可以幫助企業(yè)很好的進行多個系統(tǒng)間的消息處理事務(wù)鼻吮,同時支持實時的流處理。