mqtt选择
|
1.名称 |
MQTT |
kafka |
||
|
2.历史 |
IBM推出的一种针对移动终端设备的发布/预订协议。 |
LinkedIn公司开发的分布式发布-订阅消息系统。后来,成为Apache项目的一部分。 |
||
|
3.原理 |
基于二进制消息 发布/订阅编程模式的消息协议。 |
发布/订阅(Publish/Subscribe)模式 |
||
|
4.应用场景 |
物联网:大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。 •遥感数据 •汽车 •智能家居 •智慧城市 •医疗医护 |
在线应用(消息)和离线应用(数据文件,日志) 1.消息系统(吞吐量,内置的分区,冗余及容错性) 2.行为跟踪(户浏览页面、搜索及其他行为) 3.日志收集(抽象成一个个日志或事件的消息流) |
消息系统 |
|
|
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性。 |
||||
|
5.消息消费(push/pull) |
||||
|
6.角色对比 |
||||
|
创建主题(一类消息) |
||||
|
5.主题(Topic) |
主题筛选器:通过主题对消息进行分类的 层级主题:通过反斜杠表示多个层级关系; 通过通配符进行过滤:+可以过滤一个层级,而*只能出现在主题最后表示过滤任意级别的层级。举个例子: • building-b/floor-5:代表B楼5层的设备。 • +/floor-5:代表任何一个楼的5层的设备。 • building-b/*:代表B楼所有的设备。 注意,MQTT允许使用通配符订阅主题,但是并不允许使用通配符广播。 |
每个topic划分为多个partition。 每个partition在存储层面是append log文件。 |
||
|
6.服务质量(Quality of Service,QoS) |
为了满足不同的场景,MQTT支持三种不同级别的服务质量为不同场景提供消息可靠性: •级别0:尽力而为。消息可能会丢,但绝不会重复传输 •级别1:消息绝不会丢,但可能会重复传输 •级别2:恰好一次。每条消息肯定会被传输一次且仅传输一次 |
级别1,Kafka利用这一特点减少确认从而大大提高了并发。 |
||
|
7.存储方式 |
内存、redis、mongdb等 |
磁盘 |
将消息持久化到磁盘,因此可用于批量消费。因为kafka是对日志文件进行append操作,因此磁盘检索的开支是较小的;为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数(或尺寸)达到一定阀值时,再flush到磁盘,这样减少了磁盘IO调用的次数. |
|
|
8.设计原则(为什么MQTT用来做物联网消息传输、Kafka用来做日志收集) |
1.协议精简,不添加可有可无的功能。 2.发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递。 3.允许用户动态创建主题,零运维成本。 4.把传输量降到最低以提高传输效率。(固定长度的头部是2字节),协议交换最小化,以降低网络流量。 5.把低带宽、高延迟、不稳定的网络等因素考虑在内。 6.支持连续的会话控制。 7.理解客户端计算能力可能很低。 8.提供服务质量管理。 9.假设数据不可知,不强求传输数据的类型与格式,保持灵活性。 |
吞吐量 1.数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能 2.zero-copy:减少IO操作步骤 3.数据批量发送 4.数据压缩 5.Topic划分为多个partition,提高parallelism 负载均衡 1.生产者发送消息到pattition 2.存在多个partiiton,每个partition有自己的replica,每个replica分布在不同的Broker节点上 3.多个partition需要选取出lead partition,lead partition负责读写,并由zookeeper负责fail over 4.通过zookeeper管理broker与consumer的动态加入与离开 拉取系统 kafka broker会持久化数据,consumer采取pull的方式消费数据: 1.consumer根据消费能力自主控制消息拉取速度 2.consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等 可扩展性 当需要增加broker结点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册在zookeeper上的watcher感知这些变化,并及时作出调整。 |
||
|
9.消息类型 |
1. CONNECT:客户端连接到MQTT代理 2. CONNACK:连接确认 3. PUBLISH:新发布消息 4. PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复 5. PUBREC:QoS 2消息流的第一部分,表示消息发布已记录 6. PUBREL:QoS 2消息流的第二部分,表示消息发布已释放 7. PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成 8. SUBSCRIBE:客户端订阅某个主题 9. SUBACK:对于SUBSCRIBE消息的确认 10. UNSUBSCRIBE:客户端终止订阅的消息 11. UNSUBACK:对于UNSUBSCRIBE消息的确认 12. PINGREQ:心跳 13. PINGRESP:确认心跳 14. DISCONNECT:客户端终止连接前优雅地通知MQTT代理 |
/ |
||
|
10.服务端实现 |
数十个 MQTT 服务器端程序 Mosquitto(C/C++) emqttd(Erlang/OTP) Moquette HiveMQ(Java) |
Scala 官方实现的系统 |
||
|
11.总结 |
两者都是从传统的Pub/Sub消息系统演化出来的,但是进化的方向不一样 。 Kafka是为了数据集成的场景,通过分布式架构提供了海量消息处理、高容错的方式存储海量数据流、保证数据流的顺序等特性。 MQTT是为了物联网场景而优化,提供多个QoS选项(exact once、at least once、at most once),还有层级主题、遗嘱等特性。 |
|||
|
12.有意思的东西 |
Mqtt to Apache Kafka Connect https://github.com/evokly/kafka-connect-mqtt Kafka MQTT Bridge Example https://github.com/mcollina/mosca/tree/master/examples/kafka Mosca supports different backends such as redis and mongodb, but also kafka. A Kafka MQTT Bridge application is included in the Mosca examples. |
|||
--------------------- 本文来自 wang被注册了 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yeshenzzrff/article/details/79021479?utm_source=copy
mqtt选择的更多相关文章
- 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽.不 ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- 【开源】MQTT推送服务器——zer0MqttServer(Java编写)
目录 说明 功能 如何使用 参考帮助 说明 重要的放前面:V1.0版本是一个非常基础的版本,除了完整的MQTT协议实现外,其他功能什么都没做. MQTT 协议是 IBM 开发的即时通讯协议,相对于 I ...
- TCP/IP, WebSocket 和 MQTT
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.M ...
- 云巴:基于MQTT协议的实时通信编程模型
概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...
- Android推送方案分析(MQTT/XMPP/GCM)
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1. 使用GCM服务(Google Cloud ...
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
一.先看下相关国外的专业数据对四大协议的比较: Protocol CoAP XMP ...
- 【转载】Android推送方案分析(MQTT/XMPP/GCM)
http://m.oschina.net/blog/82059 本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适 ...
- 物联网MQTT协议分析和开源Mosquitto部署验证
在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...
随机推荐
- 【二分图匹配】BZOJ1562-[NOI2009] 变换序列
[题目大意] 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定义一个变换序列T0,T1,…,TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0,1,…, ...
- [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...
- 十一. 图形、图像与多媒体4.Graphics类的绘图方法
Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...
- 装载 | Eclipse中搭建最新版本的Android开发环境
文章目录 准备工作 下载文件 下载JDK并配置系统变量环境 下载安装Eclipse 下载Android SDK 下载ADT插件 使用下载好的软件搭建Android开发环境 安装Android的SDK ...
- linux 端口占用查看 netstat -tunpl | grep 6379
端口占用查看 netstat -tunpl | grep 6379 netstat -luntpu|grep fdfs
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
- lua调试的工具选择
近期看到一个关于vs的lua调试插件, 装了vs2012试了下, 忍不住发此文总结下lua各种调试工具 Decoda 这是现今地球上调试lua5.1最方便的工具, 没有之中的一个. 强大的注入式调试, ...
- [转]Creating an Entity Framework Data Model for an ASP.NET MVC Application (1 of 10)
本文转自:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/creating-a ...
- Oracle imp关于fromuser 和 touser的用法
fromuser就是把当前的dmp文件中的某一个用户下的数据取出.touser就是把现在dmp文件中的数据导入到目标库的指定user下.具体命令这样.exp userid=system/manager ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...