架構及說明
基於業務的需求,整個流程設計如下:
設備發送的數據找到broker,broker通過橋接插件直接轉給Kafka一份,kafka再將數據發給java編寫的數據處理中心,在這裏將解析協議報文,然後將解析後的報文通過rocketmq發送給數據存儲中心,數據存儲中心再將數據分別插入不同的表,然後將數據封裝成能被用戶看懂的數據發送給數據推送中心,數據推送中心通過友盟和Goeasy將數據推送給用戶.
用戶發送的下行數據會首先來到數據存儲中心,再這裏將數據補齊後發送到數據處理中心,數據處理中心將數據轉化爲協議報文,直接通過mqttclient將數據發送給mqtt broker上對應設備id的主題,訂閱此主題的設備就會拿到報文
emqx安裝
因爲我們需要用到emqx的kafka橋接插件,這個插件在安裝版中是沒有的,所以需要使用源碼安裝emqx
首先需要安裝emqx的運行環境,目前kafka的橋接插件emqx_kafka_bridge只能運行在emqx3.0版本上,所以搭建的環境都是基於emqx3.0版本的
首先是下載和安裝erlang21.3
yum install gcc* glibc-devel makencurses-devel openssl-devel autoconf -y
yum install unixODBC unixODBC-devel-y
yum -y install gcc-c++ kernel-develm4 python-simplejson
下載並編譯erlang
wget http://erlang.org/download/otp_src_21.3.tar.gz
tar -zxvf otp_src_21.3.tar.gz
cd otp_src_21.3
./otp_build autoconf
./configure --enable-smp-support–enable-threads --enable-sctp --enable-kernel-poll --enable-hipe --with-ssl
make && make install
完成後使用erl命令驗證
如果返回
Erlang/OTP 21 [erts-10.3] [source][64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V10.3 (abort with ^G)
則證明編譯成功,使用halt().命令退出erlang命令行
安裝Rebar(Erlang開發構建工具)
git clonegit://github.com/rebar/rebar.git
cd rebar
./bootstrap
安裝成功會顯示
Congratulations! You now have aself-contained script called “rebar” in
your current working directory. Placethis script anywhere in your path
and you can use rebar to buildOTP-compliant apps.
配置環境變量
vim /etc/profile
export PATH=/emq/rebar/:$PATH (rebar安裝目錄)
執行文件:
source /etc/profile
測試是否安裝成功
rebar -V
接下來就可以安裝emqx了
首先我們選擇emqx3.0.1安裝
wget -c https://github.com/emqx/emqx-rel/archive/v3.0.1.tar.gz
tar -zxvf v3.0.1.tar.gz
cd /
由於編譯時間超長,所以我們可以提前先把kafka插件安裝上
修改 emqx-rel目錄下的Makefile:
DEPS += (MAIN_APPS),(dep)))
DEPS += emqx_kafka_bridge 【增加這行】
(MAIN_APPS),KaTeX parse error: Expected group after '_' at position 9: (evaldep_̲(call app_name,$(dep)) = (dep)(dep))))
dep_emqx_kafka_bridge = git https://github.com/bob403/emqx_kafka_bridge.git master 【增加這行】
在relx.config裏增加:
{emqx_kafka_bridge, load}
然後就可以懷着虔誠的心,在emqx的解壓目錄輸入make,並且祈禱不要編譯失敗
編譯成功後,需要更改kafka插件的配置
/emq/emqx-rel/_rel/emqx/etc/plugins/emqx_kafka_bridge.conf
查看插件列表有沒有kafka插件
./emqx_ctl plugins list
然後啓動插件
./emqx_ctl plugins load emqx_kafka_bridge
最後如果要使橋接成功,還需要提前在kafka上面創建一個名爲Processing的主題
接下來,你的設備發送的mqtt消息就可以成功橋接到kafka上去了