1. 程式人生 > ># EMQ X 持久化外掛系列(一)- 訊息儲存到 OpenTSDB 資料庫

# EMQ X 持久化外掛系列(一)- 訊息儲存到 OpenTSDB 資料庫

OpenTSDB 是可擴充套件的分散式時序資料庫,底層依賴 HBase 並充分發揮了HBase的分散式列儲存特性,支援數百萬每秒的讀寫。

面對大規模快速增長的物聯網感測器採集、交易記錄等資料,時間序列資料累計速度非常快,時序資料庫通過提高效率來處理這種大規模資料,並帶來效能的提升,包括:更高的容納率(Ingest Rates)、更快的大規模查詢(儘管有一些比其他資料庫支援更多的查詢)以及更好的資料壓縮。

本文以 CentOS 7.2 系統中的實際例子來說明如何通過 OpenTSDB 來儲存相關的資訊。

安裝與驗證 OpenTSDB 伺服器

讀者可以參考 OpenTSDB 官方文件Docker

來下載安裝 OpenTSDB 伺服器,本文使用 OpenTSDB 2.4.0 版本。

配置 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