(一)kafka基礎(chǔ)框架
A. 什么是kafka
kafka是MQ(即消息中間件),所有消息中間件都是基于生產(chǎn)者-消費(fèi)者模型來(lái)設(shè)計(jì)的;
早期數(shù)據(jù)量不大、系統(tǒng)不復(fù)雜時(shí),只要有blocked queue就能實(shí)現(xiàn)該模型基本功能;
由于微服務(wù)興起,系統(tǒng)被拆分多個(gè)子系統(tǒng)(工程),使用MQ完成多個(gè)服務(wù)作為生產(chǎn)者和消費(fèi)者。
kafka早期應(yīng)用場(chǎng)景時(shí)記錄網(wǎng)站用戶的活動(dòng)追蹤、日志聚合等。
B. 消息中間件的功能
-
解耦
原場(chǎng)景:組件a向組件b,c,d發(fā)送信息,現(xiàn)在需要改向b,c,e發(fā)送,這需要修改代碼才能行實(shí)現(xiàn);
新場(chǎng)景:采用MQ,可讓a作為生產(chǎn)者,發(fā)送信息給MQ,然后讓后端bcde作為消費(fèi)者自行訂閱MQ中的信息(即不同topic);
-
異步
原場(chǎng)景:客戶端發(fā)送信息給a,a處理完(耗時(shí)20ms)后逐個(gè)向b,c,d發(fā)送消息,bcd各自需耗時(shí)200ms處理再返回給a,由a最后給到client已完成,共計(jì)用時(shí)200*3+20=620ms;
新場(chǎng)景:客戶端依然發(fā)送給a組件,a作為生產(chǎn)者經(jīng)20ms處理后轉(zhuǎn)發(fā)給MQ,此時(shí)a可以直接回復(fù)client已完成,共計(jì)耗時(shí)20ms(無(wú)需等待bcd消費(fèi)者處理的時(shí)間);
削峰:業(yè)務(wù)高峰期時(shí)生產(chǎn)速度比消費(fèi)速度快,但未及時(shí)消費(fèi)的數(shù)據(jù)可以積壓在MQ,在延后一段時(shí)間完成消費(fèi),保證不被打爆。
C. kafka優(yōu)缺點(diǎn)
-
優(yōu)點(diǎn):
高吞吐:10w/s;
易于橫向擴(kuò)展;
社區(qū)活躍度高
-
缺點(diǎn):
功能不豐富,缺乏插件;
主要用于大數(shù)據(jù)領(lǐng)域(或日志消息等)
-
瓶頸:
核心性能瓶頸是網(wǎng)絡(luò)帶寬
磁盤 & 內(nèi)存也是需要注意的,關(guān)系到頁(yè)緩存和順序?qū)懭?/p>
D. kafka的競(jìng)品
-
rocketMQ:
吞吐能力和kafka一般(10w/s),擴(kuò)展性也很好,且經(jīng)過(guò)阿里雙11實(shí)戰(zhàn);
插件也不豐富,主要用于電商場(chǎng)景
-
rabbitMQ:
插件豐富,基于erlang實(shí)現(xiàn)(低延時(shí));
但吞吐一般、擴(kuò)展能力弱