AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

腾讯宣布开源 RoP:Apache Pulsar 支持原生 RocketMQ 协议

  • 2021-05-17
  • 本文字数:2657 字

    阅读完需:约 9 分钟

腾讯宣布开源 RoP:Apache Pulsar 支持原生 RocketMQ 协议

RocketMQ 用户可以无缝迁移到 Apache Pulsar 了。自此,Apache Pulsar 补齐了兼容主流消息队列协议的能力。


我们很高兴地宣布腾讯云中间件开源 RoP!RoP 将 RocketMQ 协议处理插件引入 Pulsar broker,这样 Pulsar 就能支持原生 RocketMQ 协议了。本次 RoP 开源,感谢合作伙伴 StreamNative 在架构设计与实现方案中予以的支持,在后续腾讯云中间件也将联合 StreamNative 共同维护本项目。


什么是 RoP?


与 KoP、MoP 和 AoP 相似,RoP 是一种可插拔的协议处理插件。


将 RoP 协议处理插件添加到现有 Pulsar 集群后,用户无需修改代码,便能将现有的 RocketMQ 应用程序和服务迁移到 Pulsar,同时还能使用 Pulsar 的强大功能,例如:


  • 计算与存储分离

  • 多租户

  • 跨地域复制

  • 分层分片

  • 轻量化计算框架 – Pulsar Functions


为什么开发 RoP?


Apache Pulsar 是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体。自 2016 年开源以来,Pulsar 已被广泛采用,并于 2018 年被指定为 Apache 顶级项目。


RocketMQ 是一款强大的开源分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。


Pulsar 和 RocketMQ 拥有广泛的用户群体和强劲的开发支持,全球许多头部公司都在使用这两种消息服务。同时,我们也收到了用户的需求,希望能在 Pulsar 与 RocketMQ 之间传输数据,并充分利用这两种消息系统的优势。


Apache Pulsar 通过对 Consumer 层的抽象,提供了队列和流两种消费模型的统一抽象。在 Client 与 Broker 的交互中,Pulsar 基于 Protobuf 的二进制协议,提供更高的性能和更低的延迟。除此之外,通过 Protobuf 协议,Pulsar 可以更容易地支持并实现多语言的客户端,比如:Java、CPP、Python 和 Go 语言等客户端。


但是,对于使用其他消息传输协议编写的应用程序(例如,RocketMQ),由于使用的消息处理协议和 Pulsar 不同,如果 Pulsar 想要兼容 RocketMQ 协议,为了将 RocketMQ 的协议适配到 Pulsar 的消息协议层中,用户需要重写整个协议层,这给用户的迁移和切换带来了很大的成本。


为了解决这个问题,最直观的处理方式是使用类似 Pulsar Connector 的形式,将用户在 RocketMQ 中的现存数据通过 RocketMQ Wrapper 的方式导入到 Pulsar 集群,但是这需要业务端更改自己的业务代码逻辑,同时需要确保两边的数据能够保证一致,这给使用 RocketMQ 的用户带来了很大的技术挑战。所以,能否给用户提供一个开箱即用的迁移策略和方案并且用户无需做任何代码修改呢?这便是 RoP 诞生的最初目的。


怎样开发 RoP?


Apache Pulsar 在 PIP-41(https://github.com/apache/pulsar/wiki/PIP-41%3A-Pluggable-Protocol-Handler) 中介绍了一种全新的接入方式。通过在 Broker 端暴露 Protocol Handler 插件,将 Netty 的 channel 和 Pulsar 的 Broker Service(https://github.com/apache/pulsar/blob/907fcb5ba8/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java) 对象暴露给用户。这允许用户直接操作和调用 Pulsar 中比较低阶的 API(例如:PersistentTopic 和 ManagerLedger)。基于这个协议,用户无需更改代码,只需将服务请求转发到 RoP 中,RoP 利用 Protocol Handler 的插件将用户的请求转发到 Pulsar 中即可。


RoP 架构



通过对比 Pulsar 和 RocketMQ 之间的协议可以发现,二者在消息处理的思路上有不少相似之处,比如这两种协议都包含如下操作:


  • Topic Lookup: 所有 Clients 与任意 Broker 建立连接之前,会先去查找当前 Topic 的 Owner Broker。获取到对应的 metadata 之后,Clients 会与 Owner Broker 之间建立 TCP 连接进行数据的交互。

  • Produce: Clients 与 Topic 所在的所有 Owner Broker 之间进行通信并将消息 append 到对应的分布式日志中。

  • Consume: Clients 与 Topic 所在的所有 Owner Broker 之间进行通信并从分布式日志中读取指定的消息。

  • Offset: Producer 生产到 topic 中的消息会分配一个唯一的 offset,Pulsar 中使用 MessageID 来标识 offset。消费者可以通过 offset 去日志中获取指定位置的消息。


Apache Pulsar 的存储层使用了 Apache BookKeeper,Pulsar 相当于 BookKeeper 的 Client,通过调用 ManagerLedger 对象能够很容易的达到为分布式日志操作的目的。基于此,RoP 可以很好的将 RocketMQ 中对 commitLog 和 queueLog 的操作映射到 BookKeeper 中来。


RoP 概念


Offset 和 MessageID


在 RocketMQ 中,使用 offset 来标识消息的位置,当消息被生产到指定的 Topic 之后,会为每一个消息分配一个唯一的 offset;在 Pulsar 中,使用 MessageID 来唯一标识每条消息,每一个 MessageID 由三部分组成,ledgerIDentryIDpartitionID。我们通过合理的划分将 messageID 和 offset 进行映射,来唯一标识 Topic 中的每一条消息。


Message


对于一条消息,RocketMQ 和 Pulsar 都包含消息的 headers 和 payload 等字段,通过对消息协议的解析,我们可以轻松的将 RocketMQ message 转换为 Pulsar 的 message 格式。为了更好的兼容 Tag 消息的功能,在消息协议的处理方面增加了 8 字节的特殊字段,用来区分该消息是否属于 Tag 消息。


Topic Lookup


在 Pulsar 中,client 与 broker 建立连接之前,会根据当前传入的 Topic 执行 Lookup 操作,在 Broker 集群中寻找当前 Topic 所在的 Owner Broker,然后将该 Owner Broker 的地址返回并与 client 建立 TCP 连接,再进行数据交互。在 RocketMQ 中,client 与 broker 建立连接之前,会先处理 GET_ROUTEINTO_BY_TOPIC 命令,获取 topic 所在的路由信息后,建立对应的 TCP 连接,再进行数据交互。


如何使用 RoP?


目前,RoP 发布了 0.1.0 版本,你可以用过以下任一方式参与该项目:


  • 想上手试试?


可在以下网址下载 RoP 和查阅用户指南:https://github.com/streamnative/rop/blob/master/README.md。无论是快速启动 standalone RoP 或在现有 Pulsar 集群中部署 RoP,都可轻松实现。


另外,为了方便快速使用并验证 RoP,我们提供了 RocketMQ 的常见使用场景和用例,你可以直接使用这些代码示例验证服务:https://github.com/streamnative/rop/tree/master/examples/src/main/java/org/streamnative/rocketmq/example


  • 想解决问题?


如有任何问题,可以在 RoP GitHub repo 中 创建 issue 或加入 RoP 微信群进行讨论。无论哪种方式,RoP 资深专家都随时在线:https://github.com/streamnative/rop/issues/new


  • 想参与贡献?


RoP 源码开放并托管在 GitHub 上:https://github.com/streamnative/rop。如需改进功能或修复 bug,欢迎提交 PR。


2021-05-17 17:044340

评论 1 条评论

发布
用户头像
欢迎你关注 Apache Pulsar : http://github.com/apache/pulsar 下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,值得你关注研究🧐
2021-05-17 21:19
回复
没有更多了
发现更多内容

互联网众包平台:软件开发项目的明智之选

知者如C

软件研发流程、架构规范、技术标准、需求过程等全文档

金陵老街

项目经理 软件开发资料 开发模板 文档干货

深入探讨I/O模型:Java中的阻塞和非阻塞和其他高级IO应用

程序那些事

Java io 程序那些事

四川南充市等保测评机构有哪些?等保测评价格是多少?

行云管家

等保 等级保护 等保测评 南充

第5期 | 谋远 产业互联、商业创新

用友BIP

项目管理

第3期 | GPTSecurity周报

云起无垠

浪潮信息 KeyarchOS 助力百视通 IPTV 业务底层系统完美迁移 | 龙蜥案例

OpenAnolis小助手

centos 操作系统 龙蜥社区 浪潮信息 KOS

接口响应慢该如何排查

互联网工科生

接口 Postman

模糊测试重新定义应用程序的安全性

云起无垠

2023 中国 VR 50 强企业名单发布;OpenAI 新模型性能远低于预期丨 RTE 开发者日报 Vol.71

声网

DeFi开发:探索资产支持稳定币开发中的 DeFi 聚合器

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

碰到it运维故障怎么办丫?突发IT事故怎么快速解决?

行云管家

运维 IT运维 运维故障 协同

对话在行人|京城机电:构建数智底座实现业财深度融合

用友BIP

2023全球商业创新大会 对话在行人

领导者!天翼云持续领跑中国政务云服务市场

天翼云开发者社区

云计算 云服务

高博软件学院参加第二届火焰杯软件测试高校就业选拔赛喜获佳绩

测试人

软件测试

云图说|初识API中心APIHub

华为云开发者联盟

云计算 API 华为云 华为云开发者联盟 华为云云图说

软件测试|计算机科学与工程学院举行火焰杯颁奖仪式

霍格沃兹测试开发学社

软件测试|网安学院举办第二届“火焰杯”软件测试高校就业选拔赛颁奖典礼

霍格沃兹测试开发学社

软件测试/测试开发丨南科大计算机系本科生获“火焰杯”软件测试高校就业选拔赛一等奖

测试人

软件测试

摆脱障碍,通过技术实现企业财务数字化新高度

智达方通

数字化转型 智能化 企业财务数字化 全面预算管理解决方案

从C++98到C++26,经历了什么?

树上有只程序猿

c++

从0到1实现 OpenTiny 组件库跨框架技术

华为云开发者联盟

开源 前端 开发 华为云 华为云开发者联盟

云行| 云创极速先锋,翼展电竞之都!2023天翼云中国行·深圳站圆满落幕

天翼云开发者社区

云计算 云服务 电竞

数字先锋| 柳州政务云上行,服务办事更省心!

天翼云开发者社区

云计算 云服务

腾讯宣布开源 RoP:Apache Pulsar 支持原生 RocketMQ 协议_架构_冉小龙_InfoQ精选文章