架构及说明

    基于业务的需求,整个流程设计如下:

MQTT钩子函数 mqtt框架推荐_kafka


设备发送的数据找到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上去了

kafka的配置详细见下文