新聞中心
Kafka 介紹
Kafka 是一個開源的分布式流式平臺,它可以處理大量的實時數(shù)據(jù),并提供高吞吐量,低延遲,高可靠性和高可擴(kuò)展性。Kafka 的核心組件包括生產(chǎn)者(Producer),消費(fèi)者(Consumer),主題(Topic),分區(qū)(Partition),副本(Replica),日志(Log),偏移量(Offset)和代理(Broker)。Kafka 的主要特點有:

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、曲陽ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的曲陽網(wǎng)站制作公司
- 數(shù)據(jù)磁盤持久化:Kafka 將消息直接寫入到磁盤,而不依賴于內(nèi)存緩存,從而提高了數(shù)據(jù)的持久性和容錯性。
- 零拷貝:Kafka 利用操作系統(tǒng)的零拷貝特性,減少了數(shù)據(jù)在內(nèi)核空間和用戶空間之間的復(fù)制,降低了 CPU 和內(nèi)存的開銷。
- 數(shù)據(jù)批量發(fā)送:Kafka 支持生產(chǎn)者和消費(fèi)者批量發(fā)送和接收數(shù)據(jù),減少了網(wǎng)絡(luò)請求的次數(shù)和開銷。
- 數(shù)據(jù)壓縮:Kafka 支持多種壓縮算法,如 gzip,snappy,lz4 等,可以有效地減少數(shù)據(jù)的大小和傳輸時間。
- 主題劃分為多個分區(qū):Kafka 將一個主題劃分為多個分區(qū),每個分區(qū)是一個有序的消息隊列,分區(qū)之間可以并行地讀寫數(shù)據(jù),提高了系統(tǒng)的并發(fā)能力。
- 分區(qū)副本機(jī)制:Kafka 為每個分區(qū)設(shè)置多個副本,分布在不同的代理節(jié)點上,保證了數(shù)據(jù)的冗余和一致性。其中一個副本被選為領(lǐng)導(dǎo)者(Leader),負(fù)責(zé)處理該分區(qū)的讀寫請求,其他副本為追隨者(Follower),負(fù)責(zé)從領(lǐng)導(dǎo)者同步數(shù)據(jù),并在領(lǐng)導(dǎo)者失效時進(jìn)行故障轉(zhuǎn)移。
Kafka 最初是為分布式系統(tǒng)中海量日志處理而設(shè)計的。它可以通過持久化功能將消息保存到磁盤直到過期,并讓消費(fèi)者按照自己的節(jié)奏提取消息。與它的前輩不同(RabbitMQ、ActiveMQ),Kafka 不僅僅是一個消息隊列,它還是一個開源的分布式流處理平臺。
Kafka 的應(yīng)用場景
Kafka 作為一款熱門的消息隊列中間件,具備高效可靠的消息異步傳遞機(jī)制,主要用于不同系統(tǒng)間的數(shù)據(jù)交流和傳遞。下面給大家介紹一下 Kafka 在分布式系統(tǒng)中的 7 個常用應(yīng)用場景。
- 日志處理與分析
- 推薦數(shù)據(jù)流
- 系統(tǒng)監(jiān)控與報警
- CDC(數(shù)據(jù)變更捕獲)
- 系統(tǒng)遷移
- 事件溯源
- 消息隊列
1. 日志處理與分析
日志收集是 Kafka 最初的設(shè)計目標(biāo)之一,也是最常見的應(yīng)用場景之一??梢杂?Kafka 收集各種服務(wù)的日志,如 web 服務(wù)器、服務(wù)器日志、數(shù)據(jù)庫服務(wù)器等,通過 Kafka 以統(tǒng)一接口服務(wù)的方式開放給各種消費(fèi)者,例如 Flink、Hadoop、Hbase、ElasticSearch 等。這樣可以實現(xiàn)分布式系統(tǒng)中海量日志數(shù)據(jù)的處理與分析。
下圖是一張典型的 ELK(Elastic-Logstash-Kibana)分布式日志采集架構(gòu)。
- 購物車服務(wù)將日志數(shù)據(jù)寫在 log 文件中。
- Logstash 讀取日志文件發(fā)送到 Kafka 的日志主題中。
- ElasticSearch 訂閱日志主題,建立日志索引,保存日志數(shù)據(jù)。
- 開發(fā)者通過 Kibana 連接到 ElasticSeach 即可查詢其日志索引內(nèi)容。
2. 推薦數(shù)據(jù)流
流式處理是 Kafka 在大數(shù)據(jù)領(lǐng)域的重要應(yīng)用場景之一??梢杂?Kafka 作為流式處理平臺的數(shù)據(jù)源或數(shù)據(jù)輸出,與 Spark Streaming、Storm、Flink 等框架進(jìn)行集成,實現(xiàn)對實時數(shù)據(jù)的處理和分析,如過濾、轉(zhuǎn)換、聚合、窗口、連接等。
淘寶、京東這樣的線上商城網(wǎng)站會通過用戶過去的一些行為(點擊、瀏覽、購買等)來和相似的用戶計算用戶相似度,以此來給用戶推薦可能感興趣的商品。
下圖展示了常見推薦系統(tǒng)的工作流程。
- 將用戶的點擊流數(shù)據(jù)發(fā)送到 Kafka 中。
- Flink 讀取 Kafka 中的流數(shù)據(jù)實時寫入數(shù)據(jù)湖中其進(jìn)行聚合處理。
- 機(jī)器學(xué)習(xí)使用來自數(shù)據(jù)湖的聚合數(shù)據(jù)進(jìn)行訓(xùn)練,算法工程師也會對推薦模型進(jìn)行調(diào)整。
這樣推薦系統(tǒng)就能夠持續(xù)改進(jìn)對每個用戶的推薦相關(guān)性。
3. 系統(tǒng)監(jiān)控與報警
Kafka 常用于傳輸監(jiān)控指標(biāo)數(shù)據(jù)。例如,大一點的分布式系統(tǒng)中有數(shù)百臺服務(wù)器的 CPU 利用率、內(nèi)存使用情況、磁盤使用率、流量使用等指標(biāo)可以發(fā)布到 Kafka。然后,監(jiān)控應(yīng)用程序可以使用這些指標(biāo)來進(jìn)行實時可視化、警報和異常檢測。
下圖展示了常見監(jiān)控報警系統(tǒng)的工作流程。
- 采集器(agent)讀取購物車指標(biāo)發(fā)送到 Kafka 中。
- Flink 讀取 Kafka 中的指標(biāo)數(shù)據(jù)進(jìn)行聚合處理。
- 實時監(jiān)控系統(tǒng)和報警系統(tǒng)讀取聚合數(shù)據(jù)作展示以及報警處理。
4. CDC(數(shù)據(jù)變更捕獲)
CDC(數(shù)據(jù)變更捕獲)用來將數(shù)據(jù)庫中的發(fā)生的更改以流的形式傳輸?shù)狡渌到y(tǒng)以進(jìn)行復(fù)制或者緩存以及索引更新等。
Kafka 中有一個連接器組件可以支持 CDC 功能,它需要和具體的數(shù)據(jù)源結(jié)合起來使用。數(shù)據(jù)源可以分成兩種:源數(shù)據(jù)源( data source ,也叫作“源系統(tǒng)”)和目標(biāo)數(shù)據(jù)源( Data Sink ,也叫作“目標(biāo)系統(tǒng)”)。Kafka 連接器和源系統(tǒng)一起使用時,它會將源系統(tǒng)的數(shù)據(jù)導(dǎo)人到 Kafka 集群。Kafka 連接器和目標(biāo)系統(tǒng)一起使用時,它會將 Kafka 集群的數(shù)據(jù)導(dǎo)人到目標(biāo)系統(tǒng)。
下圖展示了常見 CDC 系統(tǒng)的工作流程。
- 源數(shù)據(jù)源將事務(wù)日志發(fā)送到 Kafka。
- Kafka 的連接器將事務(wù)日志寫入目標(biāo)數(shù)據(jù)源。
- 目標(biāo)數(shù)據(jù)源包含 ElasticSearch、Redis、備份數(shù)據(jù)源等。
5. 系統(tǒng)遷移
Kafka 可以用來作為老系統(tǒng)升級到新系統(tǒng)過程中的消息傳遞中間件(Kafka),以此來降低遷移風(fēng)險。
例如,在一個老系統(tǒng)中,有購物車 V1、訂單 V1、支付 V1 三個服務(wù),現(xiàn)在我們需要將訂單 V1 服務(wù)升級到訂單 V2 服務(wù)。
下圖展示了老系統(tǒng)遷移到新系統(tǒng)的工作流程。
- 先將老的訂單 V1 服務(wù)進(jìn)行改造接入 Kafka,并將輸出結(jié)果寫入 ORDER 主題。
- 新的訂單 V2 服務(wù)接入 Kafka 并將輸出結(jié)果寫入 ORDERNEW 主題。
- 對賬服務(wù)訂閱 ORDER 和 ORDERNEW 兩個主題并進(jìn)行比較。如果它們的輸出結(jié)構(gòu)相同,則新服務(wù)通過測試。
6. 事件溯源
事件溯源是 Kafka 在微服務(wù)架構(gòu)中的重要應(yīng)用場景之一。可以用 Kafka 記錄微服務(wù)間的事件,如訂單創(chuàng)建、支付完成、發(fā)貨通知等。這些事件可以被其他微服務(wù)訂閱和消費(fèi),實現(xiàn)業(yè)務(wù)邏輯的協(xié)調(diào)和同步。
簡單來說事件溯源就是將這些事件通過持久化存儲在 Kafka 內(nèi)部。如果發(fā)生任何故障、回滾或需要重放消息,我們都可以隨時重新應(yīng)用 Kafka 中的事件。
7. 消息隊列
Kafka 最常見的應(yīng)用場景就是作為消息隊列。Kafka 提供了一個可靠且可擴(kuò)展的消息隊列,可以處理大量數(shù)據(jù)。
Kafka 可以實現(xiàn)不同系統(tǒng)間的解耦和異步通信,如訂單系統(tǒng)、支付系統(tǒng)、庫存系統(tǒng)等。在這個基礎(chǔ)上 Kafka 還可以緩存消息,提高系統(tǒng)的可靠性和可用性,并且可以支持多種消費(fèi)模式,如點對點或發(fā)布訂閱。
參考資料
- https://levelup.gitconnected.com/top-8-kafka-use-cases-distributed-systems-d47fc733c7c1
- https://blog.bytebytego.com/p/ep76-netflixs-tech-stack
- https://www.confluent.io/learn/apache-kafka-benefits-and-use-cases/
網(wǎng)站題目:Kafka在分布式系統(tǒng)中的七大應(yīng)用場景
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/djcihhe.html


咨詢
建站咨詢
