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