新聞中心
在現(xiàn)代企業(yè)中,數(shù)據(jù)是生命力。對(duì)數(shù)據(jù)進(jìn)行收集、存儲(chǔ)和管理對(duì)企業(yè)的成長至關(guān)重要。然而,為了保存大量的數(shù)據(jù),企業(yè)需要使用高效的數(shù)據(jù)存儲(chǔ)技術(shù)。MySQL和PostgreSQL等傳統(tǒng)數(shù)據(jù)庫仍然是許多企業(yè)的存儲(chǔ)選擇,它們?cè)跀?shù)據(jù)保存和查詢方面具有很高的性能。不過,這些數(shù)據(jù)庫并不是萬能的,它們無法有效地處理流式數(shù)據(jù)。對(duì)于高度變化的數(shù)據(jù)流,利用傳統(tǒng)數(shù)據(jù)庫進(jìn)行處理需要大量的計(jì)算資源,這在大型企業(yè)中是無法承受的。為了解決這個(gè)問題,Kafka流式數(shù)據(jù)管道被推出并廣泛使用于各大企業(yè)。

Kafka是由LinkedIn開發(fā)的分布式流式數(shù)據(jù)平臺(tái),旨在為企業(yè)提供大規(guī)模、高效的數(shù)據(jù)收集、傳輸和存儲(chǔ)能力。與傳統(tǒng)數(shù)據(jù)庫不同的是,使用Kafka的流式數(shù)據(jù)處理方式具有以下三個(gè)優(yōu)點(diǎn):
1.靈活的數(shù)據(jù)處理
許多傳統(tǒng)數(shù)據(jù)庫需要嚴(yán)格的數(shù)據(jù)結(jié)構(gòu)和模式,這使得將數(shù)據(jù)存儲(chǔ)和移動(dòng)到數(shù)據(jù)庫中變得困難。而Kafka與傳統(tǒng)數(shù)據(jù)庫不同,它提供了靈活的數(shù)據(jù)處理方式。在Kafka中,數(shù)據(jù)不需要預(yù)定義的模式,不需要推斷數(shù)據(jù)類型。這使得企業(yè)更加容易處理未知結(jié)構(gòu)的數(shù)據(jù),并使得系統(tǒng)可以輕松地適應(yīng)新的數(shù)據(jù)流。
2.高性能的數(shù)據(jù)批處理
與傳統(tǒng)數(shù)據(jù)庫不同,Kafka利用流數(shù)據(jù)處理方式,提供大型分布式消息隊(duì)列,支持高并發(fā)的數(shù)據(jù)傳輸和功能復(fù)雜的數(shù)據(jù)處理。當(dāng)企業(yè)需要針對(duì)海量數(shù)據(jù)進(jìn)行批量處理時(shí),Kafka的流數(shù)據(jù)處理在性能和效率上表現(xiàn)出色。Kafka還可以利用持久化存儲(chǔ),使得數(shù)據(jù)不會(huì)因任何失敗情況丟失。
3.實(shí)時(shí)的數(shù)據(jù)處理
對(duì)于實(shí)時(shí)的數(shù)據(jù)流,傳統(tǒng)數(shù)據(jù)庫的處理方式通常是相對(duì)較慢的,處理速度無法與數(shù)據(jù)產(chǎn)生的速度相匹配。但是,Kafka的流處理機(jī)制使得企業(yè)能夠在數(shù)據(jù)到達(dá)時(shí)立即進(jìn)行處理,并快速地響應(yīng)變化。這提高了企業(yè)對(duì)數(shù)據(jù)的密集實(shí)時(shí)監(jiān)視和管理能力,對(duì)準(zhǔn)確性和數(shù)據(jù)驅(qū)動(dòng)的決策產(chǎn)生積極的影響。
Kafka的流式數(shù)據(jù)管道支持多種數(shù)據(jù)源,如數(shù)據(jù)生成器、傳感器、網(wǎng)站瀏覽器、設(shè)備傳感器和消息隊(duì)列等。通過將數(shù)據(jù)從這些源中收集和處理,可以讓系統(tǒng)產(chǎn)生更多的價(jià)值。此外,使用KafkaProcessors,可以實(shí)現(xiàn)異步和同步的流數(shù)據(jù)處理,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)或定期處理。這使得企業(yè)可以根據(jù)實(shí)際情況來調(diào)整數(shù)據(jù)處理范圍和速度,并實(shí)現(xiàn)更高效和靈活的數(shù)據(jù)協(xié)作。
在實(shí)際應(yīng)用中,使用Kafka的流式數(shù)據(jù)管道可以從多個(gè)方面幫助企業(yè)。通過流數(shù)據(jù)處理機(jī)制,企業(yè)可以更好地監(jiān)視和管理其數(shù)據(jù)。使用高性能的Kafka技術(shù),企業(yè)可以更好地應(yīng)對(duì)大數(shù)據(jù)量的處理需求。此外,使用流式數(shù)據(jù)管道實(shí)現(xiàn)的數(shù)據(jù)庫生成,可以更好地支持企業(yè)內(nèi)部的數(shù)據(jù)協(xié)作和數(shù)據(jù)共享。
對(duì)于需要高效處理流式數(shù)據(jù)的企業(yè),使用Kafka的流式數(shù)據(jù)管道可以是一個(gè)非常有價(jià)值的解決方案。它提供了實(shí)時(shí)、高效、靈活和可擴(kuò)展的數(shù)據(jù)處理方式,可以幫助企業(yè)提高其數(shù)據(jù)管理水平,進(jìn)而提高整體業(yè)務(wù)競爭力。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220c+Kafka實(shí)現(xiàn)mysql與redis數(shù)據(jù)同步
前言
上篇文章簡單介紹c概念,本文結(jié)合常見的緩存業(yè)務(wù)去講解c使用。在實(shí)際開發(fā)過程中,通常都會(huì)把數(shù)據(jù)往redis緩存中保存一份,做下簡單的查詢優(yōu)化。如果這時(shí)候數(shù)據(jù)庫數(shù)據(jù)發(fā)生變更操作,就不得不在業(yè)務(wù)代碼中寫一段同步更新redis的代碼,但是這種 數(shù)據(jù)同步的代碼和業(yè)務(wù)代碼糅合在一起 看起來不是很優(yōu)雅,而且還會(huì)出現(xiàn)數(shù)據(jù)不一致問題。那能不能把這部分同步代碼從中抽離出來,形成獨(dú)立模塊呢?答案是肯定的,下面通過c結(jié)合Kafka來實(shí)現(xiàn)mysql與redis之間的數(shù)據(jù)同步。
架構(gòu)設(shè)計(jì)
通過上述結(jié)構(gòu)設(shè)計(jì)圖可以很清晰的知道用到的組件:MySQL、C、Kafka、ZooKeeper、Redis。
Kafka&Zookeeper搭建
首先在
官網(wǎng)
下載Kafka:
下載后解壓文件夾,可以看到以下幾個(gè)文件:
Kafka內(nèi)部自帶了zookeeper,所以暫不需要去下載搭建zookeeper集群,本文就使用Kafka自帶zookeeper來實(shí)現(xiàn)。
通過上述zookeeper啟動(dòng)命令以及Kafka啟動(dòng)命令把服務(wù)啟動(dòng),可以通過以下簡單實(shí)現(xiàn)下是否成功:
C搭建
c搭建具體可以參考上文,這里只講解具體的參數(shù)配置:
找到/conf目錄下的c.properties配置文件:
然后配置instance,找到/conf/example/instance.properties配置文件:
經(jīng)過上述配置后,就可以啟動(dòng)c了。
測(cè)試
環(huán)境搭建完成后,就可以編寫代碼進(jìn)行測(cè)試。
1、引入pom依賴
2、封裝Redis工具類
在application.yml文件增加以下配置:
封裝一個(gè)操作Redis的工具類:
3、創(chuàng)建MQ消費(fèi)者進(jìn)行同步
創(chuàng)建一個(gè)CBean對(duì)象進(jìn)行接收:
最后就可以創(chuàng)建一個(gè)消費(fèi)者CConsumer進(jìn)行消費(fèi):
測(cè)試Mysql與Redis同步
mysql對(duì)應(yīng)的表結(jié)構(gòu)如下:
啟動(dòng)項(xiàng)目后,新增一條數(shù)據(jù):
可以在控制臺(tái)看到以下輸出:
如果更新呢?試一下Update語句:
同樣可以在控制臺(tái)看到以下輸出:
經(jīng)過測(cè)試完全么有問題。
總結(jié)
既然c這么強(qiáng)大,難道就沒缺點(diǎn)嘛?答案當(dāng)然是存在的啦,比如:c只能同步增量數(shù)據(jù)、不是實(shí)時(shí)同步而是準(zhǔn)實(shí)時(shí)同步、MQ順序問題等; 盡管有一些缺點(diǎn),畢竟沒有一樣技術(shù)或者產(chǎn)品是完美的,最重要是合適。比如公司目前有個(gè)視圖服務(wù)提供寬表搜索查詢功能就是通過 同步Mysql數(shù)據(jù)到Es采用C+Kafka的方式來實(shí)現(xiàn)的。
你了解那些Kafka的核心概念嗎
Kafka中的數(shù)據(jù)稱為message,就類似于record和row。Message是以batches的形式寫入Kafka,batch就是一組數(shù)據(jù),他們被寫入同一個(gè)topic和partition。 Message被寫入topic,topic又被分成了partition。每個(gè)partition可以在不同的server上。
分批次寫入消息是為了提高效率。
topic:主題,一個(gè)主題代表了一類消息,就像數(shù)據(jù)庫中的表一樣。
Partition:分區(qū),一個(gè)主題有若干個(gè)分區(qū),同一個(gè)主題的分區(qū)可以不分布在同一個(gè)機(jī)器上,單一主題中的分區(qū)有序,但是無法保證所有的分區(qū)有序。
Producer用來創(chuàng)造消息。默認(rèn)情況下,producer不care往哪個(gè)partition中寫,一個(gè)topic中message會(huì)被均勻的分配到partition中。通過message key,partitioner會(huì)生成這個(gè)key的hash并把message寫到特定的partition中。
Consumer讀取數(shù)據(jù)。一個(gè)consumer會(huì)subscribe到一個(gè)或多個(gè)topic下,并以message被produce的順序讀取。通過跟蹤message offset,consumer記錄哪些消息已經(jīng)被消費(fèi)過。每個(gè)message有一個(gè)獨(dú)立的offset,對(duì)于每個(gè)partition,通過存儲(chǔ)最后消費(fèi)消息的offset在zookeeper或kafka中,consumer可以停止重啟是不失去上次讀取的位置。
Consumer組成了consumer group,group保證了每個(gè)partition只有一個(gè)成員進(jìn)行消費(fèi)。如果一個(gè)consumer失敗,group中的consumer會(huì)rebalance partition。
一個(gè)kafka的server稱為一個(gè)broker。一個(gè)partition在cluster中被歸在一個(gè)broker下,這個(gè)broker被稱為partition的leader。一個(gè)partition可以被assign到多個(gè)broker下,這樣partition就會(huì)被復(fù)制。
Replica:副本,分為leader和follower,leader對(duì)外提供服務(wù)。
為什么要用kafka:多個(gè)生產(chǎn)者,多個(gè)消費(fèi)者,磁盤存儲(chǔ),可拓展性高,高性能。
把partition從一個(gè)consumer分配到另一個(gè)consumer稱為rebalance。Rebalance保證了consumer group的高可用和高拓展性。在rebalance過程中,consumer不消費(fèi)消息。
offset:在partition中給message連續(xù)的id,用來識(shí)別每條消息。
Zookeeper的作用:在集群不同節(jié)點(diǎn)間建立coordination。同時(shí),如果哪個(gè)節(jié)點(diǎn)失敗,我們還可以通過zookeeper從之前committed offset中恢復(fù)因?yàn)閦ookeeper周期性的commit offset。如果kafka的cluster有什么更改,zookeeper會(huì)通知所有node這一更改比如增刪broker或topic。
ISR:In-Sync Replicas, 是和leader同步的復(fù)制的分區(qū),這些followers和leader有著相同的message。
QueueFullException:當(dāng)producer以broker無法接受的速度發(fā)送消息是會(huì)出現(xiàn),解決方案是增加broker的數(shù)量。
Retention Period: retention period 可以幫助保持所有published的消息并不在乎消息是否被消費(fèi)。這些記錄可以通過retention period的配置進(jìn)行銷毀來騰出一些空間。
多分區(qū)多副本的好處:kafka通過給topic指定多個(gè)分區(qū)分布在多個(gè)broker上,并發(fā)能力較好(負(fù)載均衡)。partition可以指定replica數(shù),增加了消息存儲(chǔ)的安全性,提高了容災(zāi)能力,不過也增加了存儲(chǔ)空間。
Kafka(四)集群之kafka
在章節(jié)二(
)中,我們部署了單機(jī)的kafka,現(xiàn)在我們部署一套集群模式的kafka。
這里我準(zhǔn)備了三臺(tái)虛擬機(jī):
192.168.184.134
192.168.184.135
192.168.184.136
每臺(tái)機(jī)器部署一個(gè)zk和kafka。
上一章節(jié)中zk集群已經(jīng)部署完畢。
在章節(jié)二中,134這臺(tái)機(jī)器已經(jīng)有kafka存在了,我們?cè)诹硗鈨膳_(tái)機(jī)器上安裝kafka:
在上面的文件中有幾個(gè)關(guān)鍵點(diǎn),我們一一進(jìn)行配置,我會(huì)對(duì)配置中的說明翻譯:
以下這兩個(gè)listeners,advertised_listeners 是對(duì)外暴露的服務(wù)端口,真正建立連接用的是 listeners。
在內(nèi)網(wǎng)中我們使用listenners就可以了,在docker等容器或云中使用advertised。
下面這個(gè)是日志路徑的配置
下面這個(gè)是個(gè)重點(diǎn)的東西,topic在磁盤上會(huì)分為多個(gè)partitions存儲(chǔ),相比單一文件存儲(chǔ),增加了并行性,在后續(xù)文章中會(huì)詳細(xì)去講解:
日志的保存時(shí)間:
以下是zookeeper的配置:
這里我們直接設(shè)置后臺(tái)啟動(dòng),三個(gè)節(jié)點(diǎn)都是如此:
這里面有個(gè)小坑,還記得之前我們搭建的單機(jī)環(huán)境嗎?那時(shí)候默認(rèn)的日志文件夾在/tmp/kafka-logs下面,生成了很多內(nèi)容,導(dǎo)致我們134這個(gè)節(jié)點(diǎn)無法啟動(dòng)成功,報(bào)錯(cuò)如下:
解決這個(gè)問題只需要把/tmp/kafka-logs文件刪除就好了。
看到日志出現(xiàn)這一句表明啟動(dòng)成功了:
下面我們驗(yàn)證下是否搭建成功了,首先使用kafkatool工機(jī)具連接看下:
我們?cè)?34節(jié)點(diǎn)創(chuàng)建一個(gè)topic:
查看topic列表:
在kafkatool中查看:
創(chuàng)建生產(chǎn)者:
創(chuàng)建消費(fèi)者:
生成者發(fā)送消息:
消費(fèi)者接收消息:
到此為止,kafka的集群搭建已經(jīng)完成了。在后面的文章我們會(huì)去學(xué)習(xí)如何在springboot中集成kafka。
關(guān)于kafka生成數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
網(wǎng)站欄目:Kafka流式數(shù)據(jù)管道:實(shí)現(xiàn)高效的數(shù)據(jù)庫生成(kafka生成數(shù)據(jù)庫)
網(wǎng)站路徑:http://www.5511xx.com/article/cdeeese.html


咨詢
建站咨詢
