图片25
消息队列MQ连接物联网与后端系统((业务应用,数据分析)
在大量设备接入物联网平台之后,会产生各种各样的事件和数据,为接收到后端的各种计算和存储服务。讯息队列可实现异步通讯、应用解藕、削峰平谷等功能,是物联网平台不可或缺的组成部分。
EMQ解决方案:IoT Broker直接对消息队列服务进行对接。
信息队列技术选择。
在传统的J2EE企业信息系统中,引入了消息队列MQ来实现异步消息机制,人们首先使用ActiveMQ。ApacheActiveMQ是由Apache软件基金会开发的JMS消息中间件(JMSProvider),一种纯Java程序。ActiveMQ历史悠久,有更多的历史,因此,现在并没有多少人使用它。
ActiveMQ模型:JMS1.1和J2EE1.4规范得到了充分的支持。
随后每个人都开始用RabbitMQ。RabbitMQ是一个开源的中间件,它实现了高级消息队列协议(AMQP),由爱立信发明的Erlang语言编写。最初RabbitMQ应用于金融领域,目前仍在因特网上广泛应用。
目前,RabbitMQ在因特网行业中仍有广泛的应用。
RabbitMQ实现机制比较复杂,不太适合高吞吐量的场景。许多公司会选择使用RocketMQ或Kafka来进行大量的数据处理。
RocketMQ最早是由阿里巴巴消息中间件团队开发和使用的产品,在2016年捐赠给了Apache基金会,成为Apache340个顶级开源项目之一。
RocketMQ最大的特点是支持事务类型消息,它能够保证消息发送和DB操作的最终一致性,并且可以支持大量的topic。但RocketMQ的社区并不大,用户数量比Kafka少了一点,其中不乏著名的公司,如滴滴出行就使用RocketMQ作为核心业务系统。
卡夫卡框架构成。
Kafka在大数据领域的实时计算、日志采集等场景中,已接近成为业界标准,社区活跃度很高,也非常适合应用于对事务需求不大的物联网场景。如果topic过多,则影响RocketMQ的吞吐量。
对成熟的消息队列产品进行选择,对于数据量较小的物联网系统,RabbitMQ可用于RocketMQ或Kafka。若要尝试新技术,那就考虑Pulsar的后浪吧。
普尔萨要把卡夫卡拍到沙滩上。
近年来,开放源码消息中间件Pulsar受到了广泛的关注。Pulsar类似于一个组合,它不仅能够支持像Kafka一样的高速流处理场景,而且支持标准消息队列模式,比如RabbitMQ。这样,在同一时间运行一个Pulsar系统,能够同时处理实时流和消息队列。
Pulsar实现了数据分发和存储分离,代理无状态,易于扩展。
分区
Kafka中的所有主题都是分区,因此可以提高吞吐量。对单个主题进行划分,可显著提高处理速度。
Pulsar还支持分区,但并非必需。使用Pulsar的多用户实例也能提高处理率。如果为了进一步提高性能,分区的确是必需的,那么分区也是可用的。
日志:
Kafka开发团队预见了日志对于实时数据交换系统的重要性。串行读写速度比随机读写速度高。但是,随着日志数量的增加,在单个服务器上保存所有日志已成为一项挑战。
Pulsar将日志分成几个部分,这样就可以避免大量复制日志。日志被BookKeeper分散到多个不同的服务器上。这就是说,日志没有保存在一个单独的服务器上,因此没有一个服务器会成为整个系统的瓶颈。
无状态
Kafka并非无状态,因为每个broker都包含了一个分区的所有日志,如果有一个broker宕机,并非任何一个broker都能代替其工作。
Pulsar体系结构中的数据分布和存储是相互独立的,而broker是无状态的。broker接收来自生产者的数据,然后向用户发送数据,但是这些数据保存在BookKeeper中。当工作量很大时,可以直接添加新代理。
另外,跨域复制是Pulsar的特色。Pulsar在设计的一开始就考虑到了这一特点,而且配置非常简单。有些基准测试结果显示,Pulsar能够在保持较低延迟的同时提供更高的吞吐量。
Pulsar提供许多类似Kafka的功能,例如跨域复制(PulsarFunction),Connector(PulsarIO)、基于SQL的主题查询(PulsarSQL)等,以及一些Kafka没有的功能,例如层次化存储和多租赁。
虽然Kafka和Pulsar都非常适合在物联网上使用,尽管现在Kafka仍然是主流,但是Pulsar未来能否取代Kafka,时间自会告诉我们答案。