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