热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

StreamNative宣布开源MoP:ApachePulsar支持原生MQTT协议

我们很高兴地宣布StreamNative开源了“MoP”(MQTTonPulsar)。MoP将MQTT协议处理插件引入Pulsarbroker。这样一来,ApachePulsar就

我们很高兴地宣布 StreamNative 开源了 “MoP”(MQTT on Pulsar)。MoP 将 MQTT 协议处理插件引入 Pulsar broker。这样一来,Apache Pulsar 就可以支持原生 MQTT 协议。

与 KoP 相似,MoP 是一种可插拔的协议处理插件。将 MoP 协议处理插件添加到现有 Pulsar 集群后,用户不用修改代码就可以将现有的 MQTT 应用程序和服务迁移到 Pulsar。

这样 MQTT 应用程序就可以利用 Pulsar 的特性,例如 Apache Pulsar 计算和存储分离的架构以及 Apache BookKeeper 保存事件流和 Pulsar 分层存储等特性。

什么是 Apache Pulsar

Apache Pulsar 是一个云原生的分布式消息传递和流数据平台,每天管理数千亿个事件。Pulsar 最初由 Yahoo 开发,于 2016 年底开源,并于 2018 年成为 Apache 软件基金会的***项目。Pulsar 将重要的 Yahoo 应用程序(例如 Yahoo Finance、Yahoo Mail 和 Flickr)连接到数据的整合消息传递平台。

GitHub:https://github.com/apache/pulsar 。

Pulsar 是一种多租户、高性能解决方案,用于在服务器之间传递消息。Pulsar 支持以下关键特性:

  • Pulsar 的单个实例原生支持多个集群,支持跨地域在集群间无缝复制消息
  • 极低的发布延迟和端到端延迟
  • 支持扩展到数百万个 Topic
  • 通过 Apache BookKeeper 提供的持久化消息存储机制保证消息传递

目前,Apache Pulsar 已经广泛应用于多个领域。腾讯、Verizon Media、Splunk、中国移动、BIGO 等都在使用 Pulsar 来实现业务目标。

更多用户案例,可以参考:https://streamnative.io/blog 。

什么是 MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(pubish/subscribe)模式的"轻量级"通讯协议。

该协议构建于 TCP/IP 协议之上,由 IBM 在 1999 年发布。MQTT 最大优点在于,它可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,MQTT 在物联网、小型设备、移动应用等方面得到广泛应用。

为什么需要 MoP

Apache Pulsar 为队列和流工作负载提供统一的消息模型。Apache Pulsar 支持基于 protobuf 的二进制协议,以确保高性能和低延迟。protobuf 有利于实现 Pulsar 客户端:https://pulsar.apache.org/docs/en/client-libraries/ 。

而且,该项目也支持 Java,Go,Python 和 C ++ 语言以及社区提供的第三方客户端:https://pulsar.apache.org/docs/en/client-libraries/#thirdparty-clients 。

Pulsar 支持多租户,基于 Apache BookKeeper 构建持久化机制。因此,越来越多的公司正在探索使用 Pulsar 搭建其底层服务、转变业务架构。但是,想要采用 Pulsar 的统一消息协议,用户必须重写使用其他消息协议编写的现有应用程序。

为了解决这个问题,StreamNative 一直致力于开发新项目。今年,StreamNative 开源了KoP(Kafka-on-Pulsar)和AoP(AMQP-on-Pulsar)协议处理插件,方便将使用 Kafka 和 AMQP 协议的应用程序和服务迁移到 Pulsar。

  • KoP 是一种可插拔的协议处理插件。将 KoP 协议处理插件添加到现有 Pulsar 集群后,用户不用修改代码就可以将现有的 Kafka 应用程序和服务迁移到 Pulsar
  • AoP 是一种可插拔的协议处理插件。将 AoP 协议处理插件添加到现有 Pulsar 集群后,用户不用修改代码就可以将现有的 RabbitMQ 应用程序和服务迁移到 Pulsar

StreamNative 收到大量的用户请求,请求帮助他们从 MQTT 迁移到 Pulsar。同时,StreamNative 也意识到在 Pulsar 上原生支持 MQTT 消息传输协议的必要性。所以,StreamNative 开始致力于将通用协议处理插件框架引入到 Pulsar 中。该框架允许使用 MQTT 传输协议的开发人员使用 Pulsar。

MoP 架构

MoP 是一个可插拔的协议处理插件。通过使用 Pulsar 的 Topic、Cursor 等特性,实现在 Pulsar 上支持原生 MQTT 协议。

下图展示了 MoP 协议处理插件与 Pulsar 集群的结合。MQTT Proxy 服务和 MQTT 协议处理插件都与 Pulsar broker 一起运行。

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

MoP 概念

消息的服务质量

为了适应不同的场景需求,MQTT 协议支持以下三种QoS 等级:

  • QoS0:最多只发送一次消息,或者当网络传送受阻时,根本不发送消息。也不会保存发送的消息。

  • QoS1:至少发送一次消息。如果发送方没有收到确认包,则会再次发送加上 DUP 标志的消息,直到发送方收到确认包。

  • QoS2:只成功发送一次消息。消息必须存储在发送方和接收方的本地环境中,直到被妥善处理。该 QoS 等级最高的消息服务等级。

目前,MoP 协议处理插件只支持 QoS0 和 QoS1 级别的消息服务质量。计划在未来版本中支持 QoS2。

MoP Proxy

在 MoP 中,MoP Proxy 是一个可选组件,主要用来代理 MoP 的服务。MoP Proxy 支持将 MoP 扩展至多个节点,以实现横向扩展服务。MoP Proxy 主要用于正确地转发 MQTT Client 和 Pulsar Broker 之间传递的消息数据,因此 MQTT Client 只需连接到 MoP Proxy,发送并接收数据,而无需关注 Topic 的所属 Pulsar Broker。

MoP Proxy 可以感知 Topic 所属 Pulsar Broker 的变化。一旦所属 Pulsar Broker 发生变化,MoP Proxy 可以将 MQTT Client 的网络数据包发送至新的所属 Pulsar Broker。

下图说明了 MoP Proxy 的服务流程。

  1. MQTT 客户端建立与 MoP Proxy 的连接。
  2. MoP Proxy 向 Pulsar 集群发送查找请求,确定当前 Topic 的 owner broker 的 URL 地址。
  3. Pulsar 集群将 owner broker 的 URL 地址返回给 MoP Proxy。
  4. MoP Proxy 建立与 Topic 所在的 owner broker 的连接,并开始在 MQTT 客户端和 Topic 所在的 owner broker 之间传输数据。

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

目前,MoP Proxy 以插件的方式与 Pulsar broker 一起运行。用户可以通过修改配置来开启 Proxy。

有关详细信息,可以参考:https://github.com/streamnative/mop#how-to-use-proxy 。

开始使用 MoP

MoP 是一个开源项目,采用 Apache License V2。

下载 MoP 协议处理插件最新发布版本,开始使用 MoP 协议处理插件:https://github.com/streamnative/mop/releases/ 。

关于如何使用 MoP 协议处理插件,可以参考文档:https://github.com/streamnative/mop/blob/master/README.md 。

如果在使用中遇到任何问题,可以在 MoP 仓库中提交 issue,我们会在第一时间回应。同时,我们也欢迎你为 MoP 贡献特性:https://github.com/streamnative/mop/issues 。


推荐阅读
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 消息中间件RabbitMQ 高级特性之消费端ACK与重回队列
    什么是消费端的ACK和重回队列?消费端的手工ACK和NACK消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿如果由于服务器宕机等严重问题 ... [详细]
  • celery 爬虫使用
    简介celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它由三部分组成,消息中间件, ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • RabbitMq之发布确认高级部分1.为什么会需要发布确认高级部分?在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • Docker安装Rabbitmq(配合宝塔)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker安装Rabbitmq(配合宝塔)相关的知识,希望对你有一定的参考价值。一、事前准备 ... [详细]
  • RabbitMQ的消息持久化处理
    1、RabbitMQ的消息持久化处理,消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。2、auto ... [详细]
  • 我正在使用sql-serverkafka-connect和debezium监视sqlserver数据库,但是当我发布并运行我的wo ... [详细]
author-avatar
发酵床养殖菌种
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有