写点什么

这家公司的码农有多牛,用 C++ 重写 Kafka,还能与其 API 兼容

作者:雨果
  • 2022-11-17
    北京
  • 本文字数:1590 字

    阅读完需:约 5 分钟

这家公司的码农有多牛,用C++重写Kafka,还能与其API兼容

国外公司 Redpanda 实现了对 Kafka 的 C++ 重写,而且提供与 Kafka API 的 100%兼容性。

由于用了 C++不再需要 Zookeeper 和 JVM,性能提高了好多倍,且生产操作更加简单。

毕竟 Java 这个东西做分布式系统,除了容易开发以外,没啥其他优势,C++才是这种需要性能软件的大利器。

Redpanda 和 Kafka 的具体实现上,有两个特别不同的地方。第一个是对内存和文件的管理,第二个区别是 Redpanda 对 replication 的处理方式。

01 Redpanda 对文件和内存的管理

Kafka 特别强调了,它的设计都是尽最大系统的利用系统对文件的缓存,从而来提高系统的效率。包括使用 Linux 系统特定的 API 来操作文件等等。

而 Redpanda 的做法正好相反,Redpanda 启动的时候就会分配走机器的绝大多数的内存,然后自己去管理这些内存的使用。

同时 Redpanda 对文件系统的操作也完全回避掉所有的系统缓存,而是自己来处理如何进行磁盘操作。资源的分配和隔离也完全通过 Cgroup 来管理。

这种完全依赖操作系统,和完全自己来的操作理念上的差别,也体现了 Java 和 C++的语言差别。

C++具备了这种完全不依赖系统自己进行操作和管理的能力,而 Java 想做到这种精细的操控是很难的。还不如最大限度的依赖系统。

如果操作得好,C++的应用是可以做得比操作系统的管理更高效率。很多商业化的数据库系统,都是自己管理内存和磁盘文件的。

02 Redpanda 对 replication 的处理方式

在今天的 Kafka 里,我们要么选择 ZooKeeper 来维护 metadata 要么通过 KRaft 来维护 metadata。

如果说 metadata 用了 Zookeeper 的话,Data 的 replication 依赖 follower 去 pull leader。实际上这种实现是 Kafka 里面最糟糕的地方之一。

Data 需要通过 follower 显式的 pull leader 产生了各种各样的问题,这些问题非常的不好解决。比如说这个著名的 KIP501:Avoid out-of-sync or offline partitions when follower fetch requests are not processed in time。

链接如下:

https://cwiki.apache.org/confluence/display/KAFKA/KIP-501+Avoid+out-of-sync+or+offline+partitions+when+follower+fetch+requests+are+not+processed+in+time

1.

2.

这就是个天然的系统设计问题,导致后面怎么修都不能从根本上解决。链接里面有一些深度的讨论,大家可以自行查阅。

Redpanda 对 replication 的处理就很简单了,data 放在不同的 Raft Group 里面,Raft Group 自己就能够实现对 leader 的自动维护,和数据在这个 group 之间的复制。

有人会问,Kafka 不知道这样做更好吗?当然,这样做肯定更好,毕竟很多大厂的系统都是这样做的。但是同样的实现起来也更难啊。

又有人会问 Kafka 不也实现了 KRaft 了吗?只不过很抱歉此 Raft 非彼 Raft。KRaft 只是一个非常轻量级的服务,它的目标就是取代 ZooKeeper 去管理 metadata,比如说现在谁是 leader 谁是 follower 这样的信息。

它并没有去取代系统现有的 Leader/Follower 之间数据怎么复制的这个实现。后者取代起来,对 Raft 的实现上的效率要求就比较高了。我其实挺怀疑 Confluent 能不能基于 Java 做出一个这样的实现来的。

03 Redpanda 的问题

单纯的从技术角度来看,Redpanda 确实是解决了 Kafka 长久以来的一些架构上的弊端。如果 C++的实现够可靠的话,又能兼容 Kafka 的 API,不失为一个有竞争力的产品。

当然,也有两个问题。

第一是能够找到合格的 C++程序员去实现这种系统级别的软件,那比找同样能力级别的 Java 程序员要难很多。

如果出现 Bug,调试解决起来也麻烦困难许多。所以:Redpanda 的码农水平有这么牛吗?

第二是类似 MapR 文件系统和 HDFS 的区别,一个系统要对另外一个系统保持 API 兼容,而另外一个系统自己又是在不断发展的,这种兼容性的维系,是需要付出很大代价的。

以上已经盘点了 Redpanda 的技术路线、实现方案以及问题所在,大家觉得 Redpanda 会占领市场,成为一匹黑马吗?欢迎在评论区讨论。

原文转自微信公众号“飞总聊 IT”

-----------------------------------

这家公司的码农有多牛,用 C++重写 Kafka,还能与其 API 兼容

https://blog.51cto.com/u_12208051/5860516

用户头像

雨果

关注

全球领先的DaaS厂商,构建下一代数据中台 2020-06-29 加入

500强集团中已有30多家选用;支持元数据管理,数据治理,数据开发,数据服务化,数据市场等功能; 免费下载试用官网地址:http://www.maicongs.com/#/home/probation

评论

发布
暂无评论
这家公司的码农有多牛,用C++重写Kafka,还能与其API兼容_Kafk_雨果_InfoQ写作社区