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