新聞中心
隨著信息化和網(wǎng)絡(luò)化程度的加深,大數(shù)據(jù)技術(shù)已經(jīng)走進(jìn)我們的生活和工作之中。而在大數(shù)據(jù)技術(shù)中,Kafka、ON和數(shù)據(jù)庫無疑是非常重要和常用的技術(shù)工具。本文將分別介紹它們的概念、特點(diǎn)以及使用方法。

一、Kafka
1.概念
Kafka是一種開源的分布式流處理平臺,由Apache基金會開發(fā)。它是一個(gè)高吞吐量、低延遲的消息傳遞系統(tǒng),用于處理實(shí)時(shí)數(shù)據(jù)流。Kafka將數(shù)據(jù)以流的形式發(fā)布和訂閱,為數(shù)據(jù)提供高可用性,可擴(kuò)展性和可快速部署的特性。
2.特點(diǎn)
Kafka有以下特點(diǎn):
(1)多分區(qū)支持。Kafka中的數(shù)據(jù)分為topic、partitions、messages三個(gè)概念。在Kafka中,消息被分配到不同的partitions中,每個(gè)partition在不同的broker上被維護(hù)。
(2)高吞吐量。Kafka能處理的消息數(shù)達(dá)到每秒上萬條,同時(shí)保持低延遲和高可用性。
(3)可擴(kuò)展性?;诜植际接?jì)算的架構(gòu)設(shè)計(jì),Kafka能夠支持水平擴(kuò)展,提高處理能力。
(4)消息持久化。在Kafka中,消息被保存在硬盤中,保證了可靠性和持久性。
3.使用方法
Kafka的使用方法包括以下幾步:
(1)安裝配置Kafka服務(wù)器。
(2)創(chuàng)建topics,指定partitions數(shù)量。
(3)生產(chǎn)者將消息推送到topic。
(4)消費(fèi)者從topic中獲取消息。
二、ON
1.概念
ON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,可以方便地在應(yīng)用程序中進(jìn)行解析和生成。ON格式被設(shè)計(jì)為具有易讀性,以及有效的機(jī)器和人類可讀交互性,并且易于編寫和解析。
2.特點(diǎn)
ON有以下特點(diǎn):
(1)簡潔。ON格式為純文本,易于編寫和閱讀。
(2)可讀性高。ON格式具有良好的易讀性和可視化效果。
(3)可嵌套。ON格式的元素可以嵌套,構(gòu)成一個(gè)綜合的數(shù)據(jù)結(jié)構(gòu)。
(4)可擴(kuò)展。ON格式可以根據(jù)需求擴(kuò)展新增屬性和方法。
3.使用方法
ON的使用方法包括以下幾步:
(1)創(chuàng)建一個(gè)需要轉(zhuǎn)換的ON對象。
(2)把ON對象序列化成ON字符串。
(3)把ON字符串傳輸?shù)搅硪粋€(gè)系統(tǒng)。
(4)把ON字符串反序列化成ON對象。
(5)根據(jù)需求,對ON對象進(jìn)行解析。
三、數(shù)據(jù)庫
1.概念
數(shù)據(jù)庫是一種組織和存儲數(shù)據(jù)的軟件,用于管理和維護(hù)大量有組織的數(shù)據(jù)。數(shù)據(jù)庫可以被視為一個(gè)文件庫,可以存儲和操作各種數(shù)據(jù),如數(shù)字、聲音、圖像等。
2.特點(diǎn)
數(shù)據(jù)庫有以下特點(diǎn):
(1)可持久化。數(shù)據(jù)庫中的數(shù)據(jù)可以長期存儲,不會因?yàn)殡娔X重啟或程序結(jié)束而消失。
(2)高效性。數(shù)據(jù)庫可以實(shí)現(xiàn)高性能的數(shù)據(jù)訪問,能夠高速處理大量數(shù)據(jù)。
(3)可拓展?;诜植际接?jì)算的架構(gòu)設(shè)計(jì),數(shù)據(jù)庫能夠支持水平擴(kuò)展,提高處理能力。
(4)安全性。數(shù)據(jù)庫提供了嚴(yán)格的權(quán)限管理和多層次安全保護(hù),防止數(shù)據(jù)被非法訪問。
3.使用方法
數(shù)據(jù)庫的使用方法包括以下幾步:
(1)創(chuàng)建一個(gè)數(shù)據(jù)庫管理系統(tǒng)。
(2)創(chuàng)建一個(gè)數(shù)據(jù)庫。
(3)創(chuàng)建一個(gè)表格,并定義其結(jié)構(gòu)和屬性。
(4)向表格中添加數(shù)據(jù)。
(5)進(jìn)行數(shù)據(jù)查詢和修改。
綜上所述,Kafka、ON和數(shù)據(jù)庫是大數(shù)據(jù)領(lǐng)域中非常重要和常用的工具。它們各有不同的特點(diǎn)和優(yōu)勢,可以幫助我們更好地處理大量的數(shù)據(jù),提高工作效率和數(shù)據(jù)管理能力。在實(shí)際應(yīng)用中,需要根據(jù)需求選擇合適的工具,并學(xué)習(xí)其使用方法和技巧。
相關(guān)問題拓展閱讀:
- clickhouse與kafka集成
clickhouse與kafka集成
clickhouse支持與多種存儲引擎集成,可以從集成的引擎里面讀取消息,然后寫到真正的數(shù)據(jù)存儲表里。
clickhouse批量寫入則老李的性能比較好,我們的業(yè)務(wù)場景下會大批量的產(chǎn)生數(shù)據(jù),如果使用clickhouse-jdbc去寫的,寫入時(shí)機(jī)和每批次寫入的數(shù)量不好把控,最終選擇了先將消息寫入kafka,然后由clickhouse從kafka消孫遲費(fèi)數(shù)據(jù),clickhouse server消費(fèi)到數(shù)據(jù)之后寫入真正的數(shù)據(jù)表。
clickhouse集成kafka引擎見官方文檔:
下面的介紹會與官方文檔有重復(fù),然后補(bǔ)充一些集成過程中遇到的坑。
下面介紹clickhouse與kafka集成的步驟,clickhouse版本是22.1.3.7
必要參數(shù)
可選參數(shù)
關(guān)于必選參數(shù)中的kafka_format參數(shù),參見Formats部分,format具體解釋如下
。
ONEachRow, ONStringsEachRow, ONCompactEachRow, ONCompactStringsEachRow
這幾種格式,ClickHouse會將行輸出為用換行符分隔的ON值,這些輸出數(shù)據(jù)作為一個(gè)整體時(shí),由于沒有分隔符(,)因而不是有效的ON文檔。
官方文檔給了一些示例。
由于我的真實(shí)的數(shù)據(jù)表,有一個(gè)字段是json類型的字符串,但是一開始設(shè)置kafka_format的類型為ONEachRow時(shí),從kafka消費(fèi)數(shù)據(jù)會報(bào)錯(cuò),所以kafka_format格式設(shè)置成了ONAsString,具體的錯(cuò)誤后面貼出來。
創(chuàng)建kafka引擎表,用于從kafka消費(fèi)數(shù)據(jù)
由于我的數(shù)據(jù)結(jié)構(gòu)里有嵌套json,如果使用ONEachRow,有個(gè)字段是json類型的字符串,帶轉(zhuǎn)義字符,導(dǎo)致clickhouse解析失敗,沒找到解決辦法,所以使用了ONAsString格式。
一個(gè)簡單的MergeTree引擎的表,其中content是json格式的字符串。
創(chuàng)建的物化視圖用于把從kafka消費(fèi)到的數(shù)據(jù),寫到真實(shí)的數(shù)據(jù)表里,在這個(gè)例子里,msg_json_source從kafka消費(fèi)到數(shù)據(jù),然后通過物化視圖msg_json_source_consumer將消費(fèi)到的數(shù)據(jù)寫到真實(shí)的數(shù)據(jù)表msg_target中。
由于從kafka消費(fèi)到的數(shù)據(jù)就是一個(gè)json字符串,在這里使用ONExtractString等json字段提取工具,提取msg里的字段,比如biz,sender_id,content等字段。
status_time原本計(jì)劃用DatTime64類型的,但是這個(gè)時(shí)間格式有坑,最終選擇了使用UInt64存毫秒級時(shí)間戳,具體的問題下面再介紹。
在clickhouse創(chuàng)建好3張表之后(kafka引擎表,真實(shí)數(shù)據(jù)表,物化視圖表),往kafka發(fā)消息
本地安裝一個(gè)簡易的kafka服務(wù)端,然后創(chuàng)建topic
創(chuàng)建好topic之后,使用Java客戶端往kafka發(fā)消息,使用confluent client發(fā)也可以。
添加kafka依賴
實(shí)體類,使含搭用fastjson的@ONField注解,實(shí)體類轉(zhuǎn)字符串的時(shí)候,將駝峰轉(zhuǎn)換為下劃線
測試類
最終發(fā)送完,我們查看一下clickhouse里的數(shù)據(jù)表的數(shù)據(jù),可以發(fā)現(xiàn)我們發(fā)送到kakfa里的數(shù)據(jù),已經(jīng)成功的消費(fèi),并且寫入到真實(shí)的數(shù)據(jù)表里了。
當(dāng)時(shí)測試環(huán)境部署的版本是21.9,但是這個(gè)版本有問題,不推薦安裝,建議直接部署22以上的clickhouse
我一開始就是使用的ONEachRow格式,但是我的消息體里還有嵌套的json,類似下面這種格式,里面有個(gè)字段還是個(gè)json,轉(zhuǎn)行成字符串帶轉(zhuǎn)義字符。
然后消息體的string字符串貼一條在這里
然后clickhouse解析消息體報(bào)錯(cuò),當(dāng)時(shí)的錯(cuò)找不到了,現(xiàn)在復(fù)現(xiàn)不出來了,非常的難頂。。。。
后來因?yàn)橼s版本的原因把kafka_format換成了ONAsString。
clickhouse是支持DateTime64格式的,可以到毫秒級,但是實(shí)際使用過程中卻有些坑在,
首先是有的客戶端解析毫秒字符串有問題,其次是使用ONExtract*的方法,會有差異,再然后是jdbc查詢的時(shí)候,也會導(dǎo)致時(shí)間查詢有問題。
拿毫秒時(shí)間戳和秒級時(shí)間戳做試驗(yàn),clickhouse-server版本是22.3.1.1
把上面的kafka引擎表拿出來改一下
其中status_time這個(gè)字段的類型改成DateTime64(3, ‘Asia/Shanghai’),使用ONExtractUInt提取時(shí)間,看下效果
首先發(fā)條數(shù)據(jù),數(shù)據(jù)內(nèi)容如下
傳入的是毫秒級時(shí)間戳,然后數(shù)據(jù)表存儲的時(shí)候就變成了2282年
然后如果傳入秒級的時(shí)間戳,真實(shí)的數(shù)據(jù)是這樣
clickhouse存儲的時(shí)候看著時(shí)間正常了,但是毫秒丟失了
然后修改一下物化視圖的字段提取方式,之前是 ONExtractUInt(msg,’status_time’) as status_time,現(xiàn)在改成使用 ONExtractString(msg,’status_time’) as status_time提取時(shí)間
會發(fā)現(xiàn)時(shí)間類型又正常了。
這一條數(shù)據(jù)內(nèi)容如下
最終使用ONExtractString提取毫秒時(shí)間戳,得到了正確的DateTime64的時(shí)間,非常的神奇
最終我決定來了個(gè)釜底抽薪的方法,時(shí)間直接用UInt64存,因?yàn)槲野l(fā)送出去的數(shù)據(jù)是毫秒級時(shí)間戳,最終存時(shí)間戳,查詢時(shí)間范圍的時(shí)候直接用long類型的數(shù)據(jù)between好了。
這也是無奈之舉,萬一哪天server更新版本,導(dǎo)致時(shí)間出現(xiàn)問題,那就完蛋了,希望后面時(shí)間可以穩(wěn)定一點(diǎn)吧。
kafka json 數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于kafka json 數(shù)據(jù)庫,大數(shù)據(jù)領(lǐng)域常用的Kafka、ON和數(shù)據(jù)庫簡介,clickhouse與kafka集成的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站標(biāo)題:大數(shù)據(jù)領(lǐng)域常用的Kafka、ON和數(shù)據(jù)庫簡介(kafkajson數(shù)據(jù)庫)
網(wǎng)頁地址:http://www.5511xx.com/article/ccsheph.html


咨詢
建站咨詢
