物联网关键技术:消息队列

消息队列MQ连接物联网与后端系统(业务应用、数据分析)

大量的设备接入物联网平台后,会产生各种类型的事件和数据,对接到后端的各种服务,包括计算和存储。消息队列可以起到异步通信、应用解藕、削峰平谷的作用,是物联网平台不可缺少的组成部分。

EMQ的解决方案:IoT Broker可直接对接消息队列服务

消息队列技术选型

传统J2EE企业信息系统中要引入消息队列MQ实现异步消息机制,最早大家都使用ActiveMQ。Apache ActiveMQ是Apache软件基金会所研发的JMS消息中间件(JMS Provider),纯Java程序。ActiveMQ历史悠久,历史包袱也较多,所以现在用的不多了。

ActiveMQ模型:完全支持JMS 1.1和J2EE 1.4规范

后来大家开始用RabbitMQ。RabbitMQ是实现了高级消息队列协议(AMQP)的开源中间件,用Erlang语言编写,这是爱立信发明的一种编程语言。最早RabbitMQ应用于金融领域,现在依然被互联网的大小企业广泛应用。

RabbitMQ目前依然广泛应用在互联网行业

RabbitMQ的实现机制比较重,不太适合吞吐量非常大的场景。针对海量数据处理,很多公司会选择使用RocketMQ或者Kafka。

RocketMQ最初是由阿里巴巴消息中间件团队研发并用于生产环境,后来在2016年捐献给了Apache基金会并成为Apache340个顶级开源项目之一。

RocketMQ的最大特点是支持事务型消息,即确保消息发送和DB操作两方的最终一致性,且能支持大量topic。不过RocketMQ的社区还不够大,使用者相比Kafka来说较少一些,其中也不乏知名企业,比如滴滴出行就将RocketMQ用于核心业务系统。

Kafka架构图

在大数据领域的实时计算、日志采集等场景中,Kafka几乎已经成为行业标准了,社区活跃度很高,也非常适合用于对事务性要求不高的物联网场景中。与RocketMQ相比,如果topic太多,会影响吞吐量。

我们在成熟的消息队列产品中选型,对于数据量不大的物联网系统,可以使用RabbitMQ;对于海量数据,则需要考虑使用RocketMQ或Kafka。如果想尝试一下新的技术,那么可以考虑Pulsar这个后浪。

Pulsar要把Kafka拍在沙滩上

最近两年,Yahoo开发的开源消息中间件Pulsar颇受关注。Pulsar 就像是一个合二为一的产品,不仅可以像 Kafka 那样支持高速率的流处理场景,还能像RabbitMQ那样支持标准的消息队列模式。因此只需要运行一个 Pulsar 系统就可以同时处理实时流和消息队列。

在Pulsar中,数据分发与存储分离,Broker无状态,便于扩展

分区

  • Kafka 中的所有主题都是分区的,这样可以增加吞吐量。通过分区,单个主题的处理速率可以得到大幅提升。
  • Pulsar也支持分区,但不是必需的。Pulsar使用多个消费者实例同样可以提升处理速率。如果确实需要分区来进一步提升性能,那么也可以使用分区。

日志:

  • Kafka 开发团队预见了日志对于一个实时数据交换系统的重要性。相比随机读取和写入,串行读取和写入速度更快。但当日志的量增长到很大的时候,在单台服务器上保存所有日志已经成为一个挑战。
  • Pulsar 对日志进行分段,从而避免了拷贝大块的日志。通过 BookKeeper 将日志分段分散到多台不同的服务器上。也就是说,日志并不是保存在单台服务器上,所以任何一台服务器都不会成为整个系统的瓶颈。

无状态

  • Kafka 不是无状态的,因为每个 broker 都包含了分区的所有日志,如果一个 broker 宕机,并非任意一 broker 都可以接替它的工作。
  • 在 Pulsar 架构中,数据的分发和保存是相互独立的,broker是无状态的。broker 从生产者接收数据,然后将数据发送给消费者,但数据是保存在 BookKeeper 中的。如果工作负载很高,就可以直接添加新的 broker。

此外跨域复制是 Pulsar 的拿手好戏。Pulsar 在设计之初就考虑到了这个特性,配置也很容易。一些基准测试结果表明,Pulsar 可以在提供较高吞吐量的同时保持较低的延迟。

Pulsar 提供了很多与 Kafka 相似的特性,比如跨域复制、流式消息处理(Pulsar Function)、连接器(Pulsar IO)、基于 SQL 的主题查询(Pulsar SQL)等等,还有一些 Kafka 没有的特性,比如分层存储和多租户。

Kafka和Pulsar都很适合用于物联网领域,不过目前Kafka仍然占据主流地位,但未来Pulsar是否会取代Kafka,时间自会告诉我们答案。

(0)

相关推荐

  • 消息中间件入门

    前言 本篇文章不涉及到代码,只是站在理论的角度上去思考,整理,更清晰的认识消息队列. 什么是消息中间件 其实并没有标准定义.一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用 ...

  • CTO 观点:如何为企业选择合适的消息系统?

    我是 Big Data Institute 的常务董事,技术评估是我的一项主要工作.我们帮助企业根据业务需求选择并落地最合适的技术.我们不与供应商合作,因此客户尤为看中我们能够客观地评估不同的技术. ...

  • 再见,Kafka!再见,RocketMQ!

    在开源的业界已经有这么多消息队列中间件了,Pulsar 作为一个新势力到底有什么优点呢? Pulsar 自从出身就不断的再和其他的消息队列(Kafka,RocketMQ 等等)做比较. 但是 Puls ...

  • 【新提醒】未来传感器发展为物联网关键技术

    什么是传感器?传感器是一种检测装置,能感受测量到的信息,并且能把该信息变换形式输入,实现信息的记录.存储.处理.输出.显示和控制等功能.通俗地以我们的躯体来做比喻,我们的眼睛.鼻子.耳朵等器官就是一个 ...

  • 物联网关键技术:云原生容器技术在边缘计算中的应用

    何为云原生 随着云计算的应用普及,最近几年,云原生技术(Cloud Native)的概念很火.Pivotal公司的Matt Stine于2013年首次提出云原生的概念:云原生的具体含义在过去的几年中也 ...

  • 物联网关键技术:边缘计算

    物联网的许多应用实现不完全依赖于云平台,边缘计算技术可以实现物联网应用产生更快速的网络响应,满足行业应用在实时业务.应用智能.安全与隐私保护等方面的需求. 2020 年全球有超过 500 亿的终端与设 ...

  • 物联网关键技术:时序数据库

    物联网系统中,需要实时处理的数据可通过队列送入流处理引擎:不需要实时处理的数据,用于离线分析或数据挖掘,需要先存储起来.物联网系统的数据存储的方式很多,要根据实际场景来选择. 物理网系统各种可能的存储 ...

  • 物联网关键技术:如何实现设备接入

    物联网云平台 设备接入.规则引擎.实时计算.数据存储都是物联网云平台的关键技术,其中设备接入组件(IoT Hub)是物联网云平台的核心. 物联网云平台架构(简化示意图) 物联网云平台需要支持多网络多协 ...

  • 物联网关键技术

    目录 一.传感器概述 二.传感器原理 1.电阻式传感器 2.电容式传感器 3.电感式传感器 4.压电式传感器 5.磁敏传感器 6.光电式传感器 7.热电偶与热电阻 三.传感器数据处理 1.温度补偿 2 ...

  • 【乐创“协”说】物联网消息队列MQ简介

    MQTT(Message Queuing Telemetry Transport),说人话的意思就是消息队列遥测传输.早些年的PC端盛行的时候,很多工程师压根就没有听过个绕口的名词,但是随着物联网(I ...

  • PPT 微课视频带你了解物联网应用层关键技术!

    文末可获取本文PDF版资料 物联网技术概论 主编 季顺宁,教材<物联网技术概论>,本书是高等职业教育系列教材,配套电子课件.习题答案.微课视频. 视频一:区块链概念 点击观看视频

  • 10kV配电物联网智慧台区关键技术与实践

    珠海许继电气有限公司的研究人员赵凯.孙豪文,在2020年第7期<电气技术>杂志上撰文指出,传统配电网管理模式不满足新时期发展需求,迫切需要深入应用"云大物移智"等先进技 ...