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