# EMQ X 持久化外掛系列(一)- 訊息儲存到 OpenTSDB 資料庫
OpenTSDB 是可擴充套件的分散式時序資料庫,底層依賴 HBase 並充分發揮了HBase的分散式列儲存特性,支援數百萬每秒的讀寫。
面對大規模快速增長的物聯網感測器採集、交易記錄等資料,時間序列資料累計速度非常快,時序資料庫通過提高效率來處理這種大規模資料,並帶來效能的提升,包括:更高的容納率(Ingest Rates)、更快的大規模查詢(儘管有一些比其他資料庫支援更多的查詢)以及更好的資料壓縮。
本文以 CentOS 7.2
系統中的實際例子來說明如何通過 OpenTSDB 來儲存相關的資訊。
安裝與驗證 OpenTSDB 伺服器
配置 EMQ X 伺服器
通過 RPM 方式安裝的 EMQ X,OpenTSDB 相關的配置檔案位於 /etc/emqx/plugins/emqx_backend_opentsdb.conf
,考慮到功能定位,OpenTSDB 外掛僅支援訊息儲存功能。更多 backend 外掛詳見 EMQ X 資料持久化。
配置連線地址與連線池大小、batch 策略:
## OpenTSDB Server 接入地址 backend.opentsdb.pool1.server = 127.0.0.1:4242 ## 連線池大小 backend.opentsdb.pool1.pool_size = 8 ## Max batch size of put 最大批量寫條數 backend.opentsdb.pool1.max_batch_size = 20 ## 通過 topic 過濾器儲存全部訊息 backend.opentsdb.hook.message.publish.1 = {"topic": "#", "action": {"function": "on_message_publish"}, "pool": "pool1"}
**OpenTSDB Backend 訊息儲存規則引數: **
通過 topic 過濾器,設定需要儲存訊息的主題,pool 引數區別多個數據源:
## Store Publish Message
backend.opentsdb.hook.message.publish.1 = {"topic": "#", "action": {"function": "on_message_publish"}, "pool": "pool1"}
啟動該外掛:
./bin/emqx_ctl plugins load emqx_backend_opentsdb
訊息模板
由於 MQTT Message 無法直接寫入 OpenTSDB, OpenTSDB Backend 提供了 emqx_backend_opentsdb.tmpl 模板檔案將 MQTT Message 轉換為可寫入 OpenTSDB 的 DataPoint。
訊息模板功能需要重啟 EMQ X 才能應用更改。
tmpl 檔案位於 data/templates/emqx_backend_opentsdb_example.tmpl
,使用 json 格式, 使用者可以為不同 Topic 定義不同的 Template, 類似:
{
"sample": {
"measurement": "$topic",
"tags": {
"host": ["$payload", "data", "$0", "host"],
"region": ["$payload", "data", "$0", "region"],
"qos": "$qos",
"from": "$from"
},
"value": ["$payload", "data", "$0", "temp"],
"timestamp": "$timestamp"
}
}
其中, measurement 與 fields 為必選項, tags 與 timestamp 為可選項。<Where is value of> 支援通過佔位符如 $key
提取變數名為 key
的變數,支援的變數如下:
- qos: 訊息 QoS
- form: 釋出者資訊
- topic: 釋出主題
- timestamp: 時間戳
- payload.*: JSON 訊息體內任意變數,如
{ "data": [{ "temp": 1 }] }
使用["$payload", "data", "temp"]
可以提取出1
來
本示例設定模板如下:
{
"sample": {
"measurement": "$topic",
"tags": {
"host": ["$payload", "data", "$0", "host"],
"region": ["$payload", "data", "$0", "region"],
"qos": "$qos",
"from": "$from"
},
"value": ["$payload", "data", "$0", "temp"],
"timestamp": "$timestamp"
}
}
當 Topic 為”sample” 的 MQTT Message 擁有以下 Payload 時:
{
"data": [
{
"temp": 1,
"host": "serverA",
"region": "hangzhou"
},
{
"temp": 2,
"host": "serverB",
"region": "ningbo"
}
]
}
Backend 會將 MQTT Message 轉換為:
[
{
"measurement": "sample",
"tags": {
"from": "mqttjs_ebcc36079a",
"host": "serverA",
"qos": "0",
"region": "hangzhou"
},
"value": "1",
"timestamp": "1560743513626681000"
},
{
"measurement": "sample",
"tags": {
"from": "mqttjs_ebcc36079a",
"host": "serverB",
"qos": "0",
"region": "ningbo"
},
"value": "2",
"timestamp": "1560743513626681000"
}
]
使用示例
EMQ X 管理控制檯 WebSocket 頁面中,向 sample
主題釋出如上格式訊息訊息,訊息將解析儲存到 OpenTSDB udp
資料庫對應的 measurement
中。
總結
讀者在理解了 OpenTSDB 中所儲存的資料結構,學習使用訊息模板配置寫入訊息欄位格式後可以結合 OpenTSDB 拓展相關應用。
更多資訊請訪問我們的官網 emqx.io,或關注我們的開源專案 github.com/emqx/emqx ,詳細文件請訪問 官方文件。
相關推薦
# EMQ X 持久化外掛系列(一)- 訊息儲存到 OpenTSDB 資料庫
OpenTSDB 是可擴充套件的分散式時序資料庫,底層依賴 HBase 並充分發揮了HBase的分散式列儲存特性,支援數百萬每秒的
EMQ X 規則引擎系列(二)儲存訊息到 MySQL 資料庫
場景介紹 該場景需要將 EMQ X 指定主題下且滿足條件的訊息儲存到 MySQL 資料庫。為了便於後續分析檢索,訊息內容需要進
EMQ X 規則引擎系列(五)儲存訊息到 Cassandra 資料庫
Cassandra 介紹與安裝 Cassandra 是來自 Apache 的開源分散式資料庫系統,它能在支援線性擴充套件 、 高可
Quick-Cocos2d-x入門系列(一)
由於 Cocos2d-x 中使用的是 C++ 語言,而 C++ 又對開發人員要求較高,所以逐漸地,開發者們開始將 Cocos2d-x 的 C++ 介面轉成了 Lua 介面,從而衍生出了 Cocos2d-lua 的版本。而 Quick(Quick-Coco2d-x)是
centos7 部署Scrapy服務系列(一)——centos7安裝python3.x
centos7安裝python3 檢視系統自帶的版本和安裝位置 centos7的系統安裝後正常情況下會自帶python2.7的版本。而且這個python2的版本不能被刪除,因為有很多系統命令,需要用到。 輸入python命令,檢視python的版本,輸
【webpack系列】webpack4.x入門配置基礎(一)
一、前言 webpack在不斷的迭代優化,目前已經到了4.29.6。在webpack4這個版本中,做了很多優化,引入了很多特性,將獲得更多模組型別,.mjs支援,更好的預設值,更為簡潔的模式設定,更加智慧的chunk,新增的splitChunks來自定義分隔程式碼塊等等。升級待4,在打包速度,程式碼體積,數
【ABAP自學系列(一)】
發的 img api .cn ima code pat 查看 屏幕 一、查看補丁包級別 然後看Patch Level即可。 常用T-code: SE38(寫程序) SE80(屏幕開發) Smartform(開發smartform打印) SE37(可以查看function
Linux基礎學習系列(一)
內核版本 比較 其中 問題 測試版 工具 含義 語言 復制 Linux是一種類似於UNIX的操作系統,由Linus Torvalds於1991年在minix操作系統的基礎創建。Linux憑借其優良特性已經成為目前發展潛力最大的操作系統。 Linux的版本有內核版本和
spring boot學習系列(一)
web服務器 應用程序 spring 控制器 做什麽 spring boot開發第一個應用程序1、spring boot是什麽?2、spring boot容易上手嗎?寫這篇文章技術文章,主要是記錄日常的學習以及理解。我們重新認識一下spring假設你受命使用spring開發一個簡單的hel
asp.net core入門教程系列 (一)
home padding 方式 title sys 活性 elf tro ash Asp.Net Core簡介 ASP.NET Core 是一個全新的開源、跨平臺框架,可以用它來構建基於網絡連接的現代雲應用程序,比如:Web 應用,IoT(Internet Of Thin
【原創】源碼角度分析Android的消息機制系列(一)——Android消息機制概述
run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 1.為什麽需要Android的消息機制 因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。 為什麽不允許
vue系列(一)子組件和父組件
top parent sage too msg pro 工具 light java 父組件傳遞數據到子組件props 父組件 <template> <div class="main"> <div class="top">
Hadoop源碼系列(一)FairScheduler申請和分配container的過程
opened running fetch utils ostream png on() threshold metadata 1、如何申請資源 1.1 如何啟動AM並申請資源 1.1.1 如何啟動AM val yarnClient = YarnClient.createY
源碼分析系列(一)x264_main_dataflow
images 9.png 所有 malloc 控制 相關 .com 圖1 memory http://www.cnblogs.com/xkfz007/articles/2616153.html 幀內幀間編碼部分關鍵函數 1.1 x264_encoder_open (x
ORM框架疏理——廖雪峰實戰系列(一)
命令 delete ica 隱式 orm mod prim 數據結構 lam ORM(Object Relational Mapping,對象關系映射),是一種程序設計技術,用於實現面向對象編程語言裏不同類型系統的數據之間的轉換。從效果上來說,它其實創建了一個可在編程語言裏
優秀開源軟件學習系列(一)——從零學習Spring4以及學習方法分享
文檔 軟件 準備 相關性 培訓 獎勵 在哪裏 方式 列表 一、目的1.掌握Spring4怎樣使用,以便將這個框架作為自己的一項技能。2.掌握Spring官網是怎樣介紹其產品的,在心中對Spring有最官方的、最直觀的了解。在Spring的相關領域,能夠知道怎麽下載Sprin
PHP系列(一)PHP流程控制結構
php流程控制while(){}do{}while(); for( 表達式1; 表達式2;表達式3 ){ 語句或語句序列;} if(){}if(){}elseif{}<?php$i=0;while(true){ if($i>=100) break; echo "@@
RabbitMQ學習系列(一): 介紹
ref 原理 二維碼 host 屬性 訂閱 什麽 設計 發的 1. 介紹 RabbitMQ是一個由erlang開發的基於AMQP(Advanced Message Queue )協議的開源實現。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面都非
Python開發MapReduce系列(一)WordCount Demo
logs 3-9 line counter ota python開發 home num brush 原創,轉發請註明出處。 MapReduce是hadoop這只大象的核心,Hadoop 中,數據處理核心就是 MapReduce 程序設計模型。一個Map/Reduc
Javascript系列(一)語法、關鍵保留字、變量
javascript ECMA是European Computer Manufacturers Association的縮寫,即歐洲計算機制造商協會。歐洲計算機制造商協會是制定信息傳輸與通訊的國際化標準組織。ECMAScript是ECMA制定的標準化腳本語言。目前JavaScript使用的ECMAS