《MongoDB和數(shù)據(jù)流:實(shí)現(xiàn)一個(gè)MongoDB Kafka消費(fèi)者》要點(diǎn):
本文介紹了MongoDB和數(shù)據(jù)流:實(shí)現(xiàn)一個(gè)MongoDB Kafka消費(fèi)者,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相關(guān)主題:非關(guān)系型數(shù)據(jù)庫(kù)
《MongoDB和數(shù)據(jù)流:實(shí)現(xiàn)一個(gè)MongoDB Kafka消費(fèi)者》是否對(duì)您有啟發(fā),歡迎查看更多與《MongoDB和數(shù)據(jù)流:實(shí)現(xiàn)一個(gè)MongoDB Kafka消費(fèi)者》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
作者:Andrew Morgan
譯者:仲培藝,關(guān)注數(shù)據(jù)庫(kù)領(lǐng)域,糾錯(cuò)、尋求報(bào)道或者投稿請(qǐng)致郵:zhongpy@csdn.net.
在當(dāng)前的數(shù)據(jù)領(lǐng)域,單獨(dú)一個(gè)系統(tǒng)無(wú)法支撐所有的哀求.想要分析數(shù)據(jù),則需要來(lái)源多樣的海量信息數(shù)據(jù).
同時(shí),我們迫不及待地渴求著答案;如果洞悉一切所需的時(shí)間超過(guò)了數(shù)十毫秒,信息就失去了價(jià)值——類(lèi)似于高頻交易、欺詐偵測(cè)和保舉引擎這一類(lèi)應(yīng)用程序,更是經(jīng)不起這樣的等待消耗.這通常要求在流入的數(shù)據(jù)被存入數(shù)據(jù)庫(kù)之前,就對(duì)其進(jìn)行分析.對(duì)數(shù)據(jù)丟失的零容忍和更多挑戰(zhàn)的出現(xiàn),無(wú)疑使其更為棘手.
Kafka和數(shù)據(jù)流側(cè)重于從多元fire-hose中獲取大量數(shù)據(jù)并將其分輸至需要這些數(shù)據(jù)的系統(tǒng)——通過(guò)篩選、聚合和分析的辦法.
這篇博文介紹了Apache Kafka,并舉例分析了如何將MongoDB用作流式數(shù)據(jù)的源(生產(chǎn)者)或目標(biāo)(消費(fèi)者).關(guān)于這一主題, 數(shù)據(jù)流和Kafka & MongoDB白皮書(shū)提供了更為完備的研究.
Kafka提供了一個(gè)靈活、可擴(kuò)展且可靠的辦法,用以在一個(gè)或多個(gè)生產(chǎn)者與消費(fèi)者之間進(jìn)行事件數(shù)據(jù)流交流.事件例子包括:
周期性的傳感器讀數(shù),如當(dāng)前溫度
用戶在網(wǎng)上商店向購(gòu)物車(chē)中添加商品
發(fā)送帶有特定標(biāo)簽的推文
Kafka事件流被歸納為幾個(gè)主題.每個(gè)生產(chǎn)者選擇一個(gè)主題來(lái)發(fā)送指定事件,而消費(fèi)者則根據(jù)所需主題來(lái)提取事件.例如,一個(gè)財(cái)經(jīng)應(yīng)用可以根據(jù)一個(gè)標(biāo)題來(lái)提取關(guān)于紐約證券交易所(NYSE)股票交易事件;若為求交易機(jī)會(huì),則可根據(jù)另一個(gè)標(biāo)題來(lái)提取公司財(cái)務(wù)申報(bào).
Kafka中的標(biāo)題被進(jìn)一步細(xì)分為支持?jǐn)U展的分區(qū).每一個(gè)Kafka節(jié)點(diǎn)(代理)負(fù)責(zé)接收、存儲(chǔ)并傳遞來(lái)自指定主題一個(gè)或多個(gè)分區(qū)的事件.依照這個(gè)方法,一個(gè)主題的處理和存儲(chǔ)可以線性擴(kuò)展覆蓋多個(gè)代理.也可以通過(guò)相似的方法來(lái)擴(kuò)展一個(gè)應(yīng)用——讓多個(gè)消費(fèi)者根據(jù)一個(gè)指定標(biāo)題來(lái)提取時(shí)間,每一個(gè)事件都來(lái)源自獨(dú)立分區(qū).
圖表1:Kafka生產(chǎn)者、消費(fèi)者、主題和分區(qū)
為了使MongoDB成為一個(gè)Kafka消費(fèi)者,必需要保證所接收的信息在存入數(shù)據(jù)庫(kù)之前,已被轉(zhuǎn)換成BSON文檔.此處,事件是代表JSON文檔的字符串.而字符串則被轉(zhuǎn)換成Java對(duì)象,故而便于Java開(kāi)發(fā)者應(yīng)用;這些對(duì)象隨后被轉(zhuǎn)換為BSON文檔.
完成源碼Maven配置,會(huì)發(fā)現(xiàn)測(cè)試數(shù)據(jù)更低,但仍有一些重點(diǎn);從主循環(huán)開(kāi)始,依據(jù)Kafka主題接收并處理變亂信息.
Fish class包括暗藏對(duì)象轉(zhuǎn)換成BSON文檔路徑的輔助方法:
在實(shí)際應(yīng)用中,有關(guān)信息的接收還有更多事情有待辦理——這些信息和MongoDB參考數(shù)據(jù)讀數(shù)相結(jié)合,然后通過(guò)發(fā)布到附加主題,沿著流水線操作并傳遞信息.此處,最后一步是通過(guò)mongo shell來(lái)確認(rèn)數(shù)據(jù)已存入數(shù)據(jù)庫(kù):
商業(yè)對(duì)象——Fish.java
MongoDB的Kafka消費(fèi)者——MongoDBSimpleConsumer.java
注意此處的消費(fèi)者用Kafka Simple Consumer API寫(xiě)入——還有一個(gè)相對(duì)不那么復(fù)雜的Kafka High Level Consumer API——包含管理offsets.Simple API加強(qiáng)了對(duì)應(yīng)用的控制,但代價(jià)是寫(xiě)附加碼.
Maven Dependencies – pom.xml
測(cè)試數(shù)據(jù)——Fish.json下面是一個(gè)Kafka中插入測(cè)試數(shù)據(jù)的樣例:
為了進(jìn)行simple testing,可以用 kafka-console-producer.sh
指令將數(shù)據(jù)插入clusterdb-topic1主題.
想要進(jìn)一步了解數(shù)據(jù)流以及MongoDB是如何適應(yīng)的(包含Apache Kafka和其競(jìng)爭(zhēng)互補(bǔ)技術(shù)在內(nèi)的這些內(nèi)容),可以讀數(shù)據(jù)流和Kafka & MongoDB白皮書(shū).
關(guān)于作者——Andrew Morgan
Andrew,MongoDB主要產(chǎn)物營(yíng)銷(xiāo)經(jīng)理,曾在Oracle工作超過(guò)六年,在那里他負(fù)責(zé)產(chǎn)物管理,主管High Availability.可以通過(guò)郵箱 @andrewmorgan或者他的博客(clusterdb.com)評(píng)論與他取得聯(lián)系.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/10261.html