Kafka作(zuo)為(wei)一款(kuan)熱(re)門(men)的(de)消息隊列中間件,具備高效可靠(kao)的(de)消息異(yi)步傳(chuan)遞(di)機制(zhi),主要用于不同系統間的(de)數據交(jiao)流和傳(chuan)遞(di),在企業解決方(fang)案(an)、金(jin)融支付、電信、電子(zi)商務、社(she)交(jiao)、即時(shi)通(tong)信、視頻、物聯(lian)網(wang)、車(che)聯(lian)網(wang)等(deng)眾多領域(yu)都有廣泛應用。
異步通信
將業(ye)務中屬于非核心或不重要(yao)的流(liu)程部分,使(shi)用(yong)消息異步通知(zhi)的方式發給(gei)目標系統,這樣(yang)主業(ye)務流(liu)程無需同(tong)步等待其他系統的處(chu)理結果(guo),從而達(da)到系統快速響應的目的。
如網站(zhan)的(de)用戶注(zhu)(zhu)冊(ce)(ce)場景(jing),在用戶注(zhu)(zhu)冊(ce)(ce)成功后,還需要(yao)發送(song)注(zhu)(zhu)冊(ce)(ce)郵件與注(zhu)(zhu)冊(ce)(ce)短信,這兩個流(liu)程使用Kafka消息服務通知(zhi)郵件發送(song)系統(tong)與短信發送(song)系統(tong),從而提升注(zhu)(zhu)冊(ce)(ce)流(liu)程的(de)響應(ying)速度。
圖(tu) 串行發(fa)送注冊郵件(jian)與短信流程


圖 借(jie)助消息(xi)隊(dui)列異步(bu)發送注冊郵件與短信流(liu)程


錯峰流控與流量削峰
在電子商務系(xi)(xi)統(tong)或大(da)(da)型(xing)網站中,上下(xia)(xia)游(you)(you)系(xi)(xi)統(tong)處(chu)(chu)(chu)理(li)(li)能(neng)(neng)力(li)(li)存在差(cha)異,處(chu)(chu)(chu)理(li)(li)能(neng)(neng)力(li)(li)高的(de)(de)上游(you)(you)系(xi)(xi)統(tong)的(de)(de)突(tu)發流量(liang)(liang)可(ke)能(neng)(neng)會(hui)對處(chu)(chu)(chu)理(li)(li)能(neng)(neng)力(li)(li)低的(de)(de)某些下(xia)(xia)游(you)(you)系(xi)(xi)統(tong)造成沖擊,需要提高系(xi)(xi)統(tong)的(de)(de)可(ke)用性的(de)(de)同(tong)時降低系(xi)(xi)統(tong)實(shi)現的(de)(de)復雜性。電商大(da)(da)促銷(xiao)等(deng)流量(liang)(liang)洪流突(tu)然來襲(xi)時,可(ke)以通過隊列服務堆積(ji)緩存訂單等(deng)信息(xi),在下(xia)(xia)游(you)(you)系(xi)(xi)統(tong)有能(neng)(neng)力(li)(li)處(chu)(chu)(chu)理(li)(li)消(xiao)(xiao)息(xi)的(de)(de)時候(hou)再處(chu)(chu)(chu)理(li)(li),避免下(xia)(xia)游(you)(you)訂閱系(xi)(xi)統(tong)因(yin)突(tu)發流量(liang)(liang)崩(beng)潰(kui)。消(xiao)(xiao)息(xi)隊列提供(gong)億(yi)級消(xiao)(xiao)息(xi)堆積(ji)能(neng)(neng)力(li)(li),3天的(de)(de)默認保留時長,消(xiao)(xiao)息(xi)消(xiao)(xiao)費系(xi)(xi)統(tong)可(ke)以錯(cuo)峰進(jin)行消(xiao)(xiao)息(xi)處(chu)(chu)(chu)理(li)(li)。
另外,在(zai)商品秒殺、搶購等流(liu)量(liang)短時間內暴增場景中(zhong),為了防(fang)止后(hou)端應用(yong)被壓垮,可在(zai)前后(hou)端系(xi)統間使(shi)用(yong)Kafka消息隊列傳遞(di)請求。
圖 消息隊列應對秒殺大流量場景


日志同步
在大型業務系統設計(ji)中,為了快速定位問題(ti),全鏈路(lu)追蹤日志(zhi),以(yi)及故障及時預(yu)警監控,通常需(xu)要(yao)將各系統應用的日志(zhi)集中分析處理。
Kafka設計初衷就是為(wei)了應對大(da)量日志傳輸(shu)場景,應用(yong)(yong)通(tong)過異(yi)步方式將日志消息(xi)同步到消息(xi)服務,再(zai)通(tong)過其(qi)他組件對日志做實時或離(li)線分析,也可用(yong)(yong)于關鍵(jian)日志信(xin)息(xi)收集進行應用(yong)(yong)監控。
日(ri)志同(tong)步主要(yao)有(you)三個關鍵部分(fen):日(ri)志采集客戶端,Kafka消息(xi)隊列以(yi)及后端的日(ri)志處理(li)應用。
- 日志采集客戶端,負責用戶各類應用服務的日志數據采集,以消息方式將日志“批量”、“異步”發送Kafka客戶端。
Kafka客(ke)戶端(duan)批量提交和壓(ya)縮消息,對應用服(fu)務的(de)性能影(ying)響非常小。
- Kafka將日志存儲在消息文件中,提供持久化。
- 日志處理應用,如Logstash,訂閱并消費Kafka中的日志消息,最終供文件搜索服務檢索日志,或者由Kafka將消息傳遞給Hadoop等其他大數據應用系統化存儲與分析。
圖 日志同步示意圖



上圖中Logstash、ElasticSearch分別為日志(zhi)分析(xi)和檢索的(de)開源(yuan)工(gong)具,Hadoop表(biao)示(shi)大數(shu)據分析(xi)系統。