RoP可插拔的协议处理插件
与 KoP、MoP 和 AoP 相似,RoP 是一种可插拔的协议处理插件,RoP 将 RocketMQ 协议处理插件引入 Pulsar broker,这样 Pulsar 能支持原生 RocketMQ 协议。
将 RoP 协议处理插件添加到现有 Pulsar 集群后,用户无需修改代码,便能将现有的 RocketMQ 应用程序和服务迁移到 Pulsar,同时还能使用 Pulsar 的强大功能,例如:
- 计算与存储分离
- 多租户
- 跨地域复制
- 分层分片
- 轻量化计算框架 -- Pulsar Functions
- ...
RoP 架构
RoP 概念
Offset 和 MessageID
在 RocketMQ 中,使用 offset 来标识消息的位置,当消息被生产到指定的 Topic 之后,会为每一个消息分配一个唯一的 offset;在 Pulsar 中,使用 MessageID 来唯一标识每条消息,每一个 MessageID 由三部分组成,ledgerID
、entryID
和 partitionID
。我们通过合理的划分将 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 连接,再进行数据交互。