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