Kafka 除了用作消息隊列還能干嗎?
Kafka 最初是為大規(guī)模處理日志而構(gòu)建的。它可以保留消息直到過期,并讓各個消費者按照自己的節(jié)奏提取消息。
與其之前的競品不同,Kafka 不僅僅是一個消息隊列,它還是一個適用于各種情況的開源事件流平臺。
讓我們回顧一下流行的 Kafka 用例。
01 日志處理和分析
上圖顯示了一個典型的 ELK(Elastic-Logstash-Kibana)棧。Kafka 從每個服務(wù)實例高效地收集日志流。ElasticSearch 從 Kafka 中獲取日志并編制索引。Kibana 在 ElasticSearch 的基礎(chǔ)上提供搜索和可視化用戶界面。
02 推薦系統(tǒng)中的數(shù)據(jù)流
亞馬遜等電子商務(wù)網(wǎng)站利用用戶過去的行為和相似用戶分析來計算產(chǎn)品推薦。Kafka 傳輸原始點擊流數(shù)據(jù),F(xiàn)link 對其進(jìn)行處理,而模型訓(xùn)練則消耗數(shù)據(jù)湖中的匯總數(shù)據(jù)。這樣就能不斷改進(jìn)針對每個用戶的推薦相關(guān)性。
03 系統(tǒng)監(jiān)控和警報
與日志分析系統(tǒng)類似,我們需要收集系統(tǒng)指標(biāo)來進(jìn)行監(jiān)控和故障排除。不同的是,指標(biāo)是結(jié)構(gòu)化數(shù)據(jù),而日志是非結(jié)構(gòu)化文本。指標(biāo)數(shù)據(jù)被發(fā)送到 Kafka 并在 Flink 中聚合。實時監(jiān)控儀表板和警報系統(tǒng)(如 PagerDuty)將使用匯總的數(shù)據(jù)。
04 CDC(Change Data Capture)
CDC 將數(shù)據(jù)庫的變更傳輸?shù)狡渌到y(tǒng),以便復(fù)制或更新緩存/索引。例如,在下圖中,事務(wù)日志被發(fā)送到 Kafka,并被 ElasticSearch、Redis 和二級數(shù)據(jù)庫攝取。
05 系統(tǒng)遷移
升級舊服務(wù)是一項具有挑戰(zhàn)性的任務(wù),比如編程語言陳舊、邏輯復(fù)雜、缺乏測試等等。我們可以利用消息中間件來降低風(fēng)險。如上圖所示,為了升級訂單服務(wù),我們更新了舊訂單服務(wù),以便從 Kafka 中消費輸入,并將結(jié)果寫入 ORDER Topic。新訂單服務(wù)消耗相同的輸入,并將結(jié)果寫入 ORDERNEW Topic。對賬服務(wù)會比較 ORDER 和 ORDERNEW 下收到的內(nèi)容。如果它們完全相同,新服務(wù)就會通過測試。