第二种猜想是能否直接将 Kafka 协议直接接入到 Pulsar broker 里,也就是目前 KoP 的成型。
那么关于第一种 proxy 做法,如果实现起来大概是什么样呢?OVHcloud 就有过一次尝试。
之前 OVHcloud 一直采用 Apache Kafka。尽管他们有在 Kafka 上运行多个集群且每秒处理数百万条消息的经验,但仍面临艰巨的运营挑战。所以,OVHcloud 放弃 Kafka,决定将其服务的产品转移到 Pulsar,并在 Pulsar 上构建其产品。
但是为了照顾到依旧使用 Kafka 系统的用户,所以他们想在 Pulsar 里添加一个 proxy 去支持 Kafka 协议。他们最初的做法就是将 Kafka 协议的一帧转换成 Pulsar 协议。
Proxy 收到来自 Kafka 客户端的任何一帧,通过自由状态机将其转换为 Pulsar 相应的接口。
这个状态机一种是用于接收 Kafka 请求,第二种是用于处理 Pulsar response。然后在其中间再添加一个状态机进行同步。
因为在 TCP 层进行这些操作,所以它的表现还是不错的。借由 Rust 的特性,整体运行流畅。但是这个情况下,代码仍需要一行行去写,同时 Kafka 协议里有一些是没有办法通过 proxy 方式实
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
现。比如:group coordinator 和 offsets management。
还有一个比较关键的点是,因为用 Rust 去构写,所以比较难开源。即便是开源出来也很难作为一个组件去插入到 Pulsar 系统中。
刚好去年 StreamNative 的一条推特引起了 OVHcloud 的注意。这是 StreamNative 第一次举行线下 Pulsar meetup 时翟佳老师分享的 KoP demo。
经过几次双方经验互谈交流后,双方合力推出了更完善的「KoP」。利用 Pulsar 和 BookKeeper 的事件流存储架构和 Pulsar 的可插拔协议处理插件框架来提供一种精简而全面的解决方案。
====================================================================================
所以当我们倒回去重看 Pulsar 架构,下方模块图中最核心的:Broker、Book