Kafka作為一款熱門的消息隊列中間件,具備高效可靠的消息異步傳遞機制,主要用于不同系統間的數據交流和傳遞,在企業解決方案、金融支付、電信、電子商務、社交、即時通信、視頻、物聯網、車聯網等眾多領域都有廣泛應用。
異步通信
將業務中屬于非核心或不重要的流程部分,使用消息異步通知的方式發給目標系統,這樣主業務流程無需同步等待其他系統的處理結果,從而達到系統快速響應的目的。
如網站的用戶注冊場景,在用戶注冊成功后,還需要發送注冊郵件與注冊短信,這兩個流程使用Kafka消息服務通知郵件發送系統與短信發送系統,從而提升注冊流程的響應速度。
圖 串行發送注冊郵件與短信流程

圖 借助消息隊列異步發送注冊郵件與短信流程
錯峰流控與流量削峰
在電子商務系統或大型網站中,上下游系統處理能力存在差異,處理能力高的上游系統的突發流量可能會對處理能力低的某些下游系統造成沖擊,需要提高系統的可用性的同時降低系統實現的復雜性。電商大促銷等流量洪流突然來襲時,可以通過隊列服務堆積緩存訂單等信息,在下游系統有能力處理消息的時候再處理,避免下游訂閱系統因突發流量崩潰。消息隊列提供億級消息堆積能力,3天的默認保留時長,消息消費系統可以錯峰進行消息處理。
另外,在商品秒殺、搶購等流量短時間內暴增場景中,為了防止后端應用被壓垮,可在前后端系統間使用Kafka消息隊列傳遞請求。
圖 消息隊列應對秒殺大流量場景
日志同步
在大型業務系統設計中,為了快速定位問題,全鏈路追蹤日志,以及故障及時預警監控,通常需要將各系統應用的日志集中分析處理。
Kafka設計初衷就是為了應對大量日志傳輸場景,應用通過可靠異步方式將日志消息同步到消息服務,再通過其他組件對日志做實時或離線分析,也可用于關鍵日志信息收集進行應用監控。
日志同步主要有三個關鍵部分:日志采集客戶端,Kafka消息隊列以及后端的日志處理應用。
1. 日志采集客戶端,負責用戶各類應用服務的日志數據采集,以消息方式將日志“批量”“異步”發送Kafka客戶端。
Kafka客戶端批量提交和壓縮消息,對應用服務的性能影響非常小。
2. Kafka將日志存儲在消息文件中,提供持久化。
3. 日志處理應用,如Logstash,訂閱并消費Kafka中的日志消息,最終供文件搜索服務檢索日志,或者由Kafka將消息傳遞給Hadoop等其他大數據應用系統化存儲與分析。
圖 日志同步示意圖

上圖中Logstash、ElasticSearch分別為日志分析和檢索的開源工具,Hadoop表示大數據分析系統。