下面我們來總結一下Kafka的一些應用場景:
1、日志處理與分析(最常用的場景)
下圖顯示了典型的 ELK(Elastic-Logstash-Kibana)堆棧。Kafka 有效地從每個實例收集日志流。
ElasticSearch 使用來自 Kafka 的日志并為其建立索引。Kibana 在 ElasticSearch 之上提供了搜索和可視化 UI。
2、推薦中的數據流
像很多電商網站使用用戶過去的行為和相似的用戶來計算產品推薦。
下圖展示了推薦系統的工作原理。Kafka 傳輸原始點擊流數據,通過Flink 對其進行處理,模型訓練則使用來自數據湖的聚合數據。
這使得能夠持續改進每個用戶的推薦的相關性。Kafka 的另一個重要用例是實時點擊流分析。
3、系統監控與報警
與日志分析系統類似,我們需要收集系統指標以進行監控和故障排除。
區別在于指標是結構化數據,而日志是非結構化文本。指標數據發送到 Kafka 并在 Flink 中聚合。聚合數據由實時監控儀表板和警報系統使用。
4、CDC(變更數據捕獲)
更改數據捕獲 (CDC) 將數據庫更改流式傳輸到其他系統以進行復制或緩存/索引更新。
Kafka 還是構建數據管道的絕佳工具,這意味著您可以使用它從各種來源獲取數據、應用處理規則并將數據存儲在倉庫、數據湖或數據網格中。
例如,在下圖中,事務日志發送到 Kafka 并由 ElasticSearch、redis 和輔助數據庫獲取。
5、系統遷移
升級遺留服務具有挑戰性——舊的語言、復雜的邏輯和缺乏測試。我們可以通過利用消息傳遞中間件來降低風險。
在下圖中,為了升級下圖中的訂單服務,我們更新舊的訂單服務以使用來自 Kafka 的輸入并將結果寫入 ORDER 主題。新訂單服務使用相同的輸入并將結果寫入 ORDERNEW 主題。
調節服務比較 ORDER 和 ORDERNEW。如果它們相同,則新服務通過測試。
6、事件溯源
如果您將事件作為系統中的事實來源,那么存儲應用程序的狀態就是一系列事件,系統中的其他所有內容都可以根據這些持久且不可變的事件重新計算。
事件溯源就是捕獲一系列事件中狀態的變化。公司通常使用 Kafka 作為主要事件存儲。如果發生任何故障、回滾或需要重建狀態,您可以隨時重新應用 Kafka 中的事件。
7、消息傳遞
Kafka 最好和最常見的用例之一是作為消息隊列。Kafka 為您提供了一個可靠且可擴展的消息隊列,可以處理大量數據。
我們可以將您的消息組織成“主題”,這意味著您將每條消息發布到一個特定主題,而另一方面,消費者將訂閱一個或多個主題并消費其中的消息。
微服務之間解耦通信的最大優點是,您可以隨時向這些事件添加新服務,而無需增加系統的復雜性或不必更改任何源代碼。
8、提交日志
Kafka 可以充當分布式系統的一種外部提交日志。日志有助于在節點之間復制數據,并充當故障節點恢復數據的重新同步機制。
Kafka 中的日志壓縮功能有助于支持這種用法。