Redpanda-C++实现的流式数据处理平台,功夫熊猫要挑战Kafka
大约去年这个时候,开源的消息中间件Kafka的商业化公司Confluent上市,市值一度超过200亿美金。到写这篇文章的时候,Confluent的市值90多亿美金,在Infra领域,仍旧是一个相当成功的IPO。
Confluent之所以能够获得如此的成绩,与公司主导的开源项目Kafka有密不可分的联系。对于技术圈的同学,尤其是数据技术圈的同学,Kafka这个开源项目相信大家都有所耳闻。作为大数据时代最为成功的流式处理的消息中间件产品,Kafka已经基本上变成了当前做流式数据接入的事实的标准。Kafka最早服务于Linkedin内部,在2011年开源,2012年10月份从Apache孵化器毕业,成为正式项目。伴随着移动互联网以及大数据的发展,Kafka迅速地在各个企业需要进行大规模数据处理的场景中落地。在大约2014年,我上一家公司也把Kafka正式引入到当时的移动应用分析平台。
伴随着Kafka的成功,在流式消息中间件领域,也有了一些新的挑战者,比如从Yahoo开源出来,现在由StreamNative主导的开源项目Pulsar,以及今天我们将要讨论的Redpanda。接下来我们就来介绍一下想要挑战Kafka的开源流式数据平台-Redpanda。
01
Redpanda公司简介
公司名称:Redpanda Data或者Vectorized
成立时间:2019年
创始人:Alexander Gallego
公司所在地:旧金山
融资历史:
2020年1月 种子轮300万美金 Lightspeed Venture
2021年1月 A轮1250万美金 Lightspeed Venture, GV
2022年2月 B轮5000万美金 GV,Lightspeed Venture,Haystack
从Redpanda发展的这个历史看,它从成立到现在,基本上维持了每年一轮融资的速度。3年时间融资规模达到6000多万美金,而且投资商里有Google Venture,在资本市场无疑算是得到了认可。从客户列表看,也有像Akamia这种在CDN行业已经非常知名的客户在采用Redpanda的技术。作为一个开源的Infra软件,github上有3500多颗星,也算是一个非常不错的成绩了。那么,在前面已经有非常成功的基本上是实时数据消息平台事实标准的Kafka的情况下,Redpanda为什么要做?它能够取得一定成功的原因是什么呢?
02
Redpanda有什么不同?
在文章的开头我们简单地介绍了一下Kafka以及做Kafka商业化的公司Confluent的情况。Redpanda所做的事情,简单来讲一句话就是要替换Kafka。正如Redpanda的官网上最明显的宣传语:
小字的那一行话,基本上把Redpanda与Kafka的最明显的不同列了出来:
Zookeeper-free
所有在使用Kafka的用户都知道Kafka作为一个分布式的系统,为了维护自己的数据一致性,采用Zookeeper作为自己的分布式管理的技术。在Kafka刚刚出来的那个时代,做分布式系统用Zookeeper基本上是一个不二的选择。但是随着采用Kafka的客户越来越多,使用Zookeeper作为集群管理的缺点被越来越多的用户抱怨。最主要的问题是:Kafka本身自己是一个分布式集群系统,需要一定的知识和能力来维护他。而Zookeeper又是另外一套分布式系统,需要额外的资源去维护Zookeeper来保证Zookeeper不出现问题。这样对于客户来讲,相当于同时维护两套分布式系统。另外,Kafka作为一个高吞吐的消息系统,需要用Zookeeper来维护源数据,这时候会对Zookeeper响应速度对于Kafka的健康就非常重要。而Zookeeper的设计非常强的依赖于磁盘IO的性能,而磁盘IO又是整个系统中最慢的一部分,因此Kafka一般建议在生产环境中采用更高速的SSD来做Zookeeper机器的磁盘。当时我们公司在使用Kafka的时候,有几次事故都是跟Zookeeper的稳定性有一定的关系,包括kafka的脑裂等等。Kafka社区也意识到了这个问题,因此后面专门启动了Nokeeper计划,准备将Zookeeper从kafka的设计中移出出去。但是作为一个10年左右的老项目,移出一个重度依赖的系统谈何容易。
也正是因为看到了Kafka这个问题,Redpanda从开始就采用了无Zookeeper的设计。作为一个分布式的流式数据处理平台,Redpanda采用了raft协议来保证自己分布式一致性,从而避免了引入另外一个源数据系统来保证自己的一致性,这样就大大降低了整个系统管理和运维的难度和开销。具体到raft协议相关的技术知识,本文不做详细介绍。网上关于raft协议有很多非常好的介绍资料。
JVM-Free
说到JVM-Free,主要是因为Kafka是基于Java虚拟机实现的一套系统。而基于Java虚拟机的实现的任何系统,都存在一个虚拟机调优的问题。比如内存堆大小的设置,垃圾回收算法的设置等等。这些设置在生产环境中,都需要通过数据和经验进行一定的调整,因此需要一定的经验。Redpanda则完全用C++来实现,从而在生产环境中不需要任何关于Java虚拟机的经验。作为一个纯Native应用,管理成本就比基于Java虚拟机的系统要低一些。
不过作为一个对C++, Java都有所了解的技术人员来讲。我个人认为JVM-Free并不都是优点。基于JVM的系统虽然需要了解JVM的知识,但是JVM本身由于有多年的积累沉淀,相对比较稳定。基于JVM开发应用,很少会出现crash相关的问题。而且基本上基于JVM运行的系统的开发语言都比较容易理解,Java作为最为普及的语言自不必说,Scala, kotlin等等更现代的语言掌握起来难度也不大。因此系统遇到一些问题的时候,工程师也更容易去找到问题并修复。但是用C++开发的原生的应用,首先就面临一个稳定性的问题。除非久经考验,否则就会有一定的概率出现Crash。而C++开发的系统出现Crash之后,普通程序员很难去发现问题出现的原因。C++本身相对JVM上运行的语言来讲,也更复杂和难以掌握,因此一个团队如果没有很好的C++程序员,在遇到问题的时候往往会非常对被动,只能依赖于社区去帮忙诊断和修复问题。因此JVM-Free实际上属于有利也有弊的特点。
03
Redpanda的其他特点
前面说了Redpanda与Kafka的一些不同,那么Redpanda的其他特点有哪些呢?
Kafka兼容 - 既然Kafka已经是事实的流式数据处理的标准了,那么所有的系统开发出来都会采用Kafka的协议标准。为了让客户能不用开发就迁移到Redpanda上,Redpanda协议上完全兼容kafka。
高性能 - 由于Redpanda是用C++实现的,因此在性能上就会比基于Java虚拟机的Kafka有一定的优势。当然,JVM通过多年的优化,并不是所有的C++写的程序就一定比JVM上运行的程序性能更好。但是相信优秀的C++程序员,还是能够写出性能更出色的系统来的。另外由于Redpanda进入市场的时候硬件也有了很多的新的特性,Redpanda可以更好的利用硬件的新的特性来提高自己的性能,比如DMA(Direct Memory Access)等等。总之来讲,高性能是Redpanda相对Kafka的优势。
基于Wasm的数据转换支持 - Redpanda除了支持消息的pub/sub,还支持利用Wasm脚本进行数据的转换和增强。因此可以直接通过Redpanda引擎实现一些简单流式的数据处理过程。Wasm是WebAssembly的简称,是一种可以在虚拟机上运行的二进制的指令格式。具备支持多种语音并且高效执行的优点。关于Wasm技术更多的东西,本文不做更多赘述,感兴趣的可以去webassambly.org去了解详细的技术。
下图就是在Redpanda的官网上给出的自己跟kafka的对比:
05
Redpanda商业模式
聊完了Redpanda的产品和技术,我们再来看看Redpanda的商业模式。最近几年,做Infra的公司一个比较成功的商业模式是open core,但是通过cloud和更丰富能力的enterprise版本来进行商业化。Confluent, Eleastic, Mongo以及Hashicorp基本上都是这一条路。有了前人探路,Redpanda自然也就完全可以借鉴这条成功的道路。同Kafka一样,Redpanda采用的是代码开源方式,作为一个面向开发者的底层系统,开源自然更容易获得开发者的信任以及构建一个开发者社区。商业上,Redpanda包含community, cloud以及Enterprise三个版本,如下:
具体到价格,在Redpanda的官网上并没有列出报价信息,相信目前还在非常早期的商业化阶段,更重要的目标应该是获取愿意一起成长的种子用户获取反馈,等产品更成熟稳定后,直接借鉴Confluent的定价方式就可以了。
06
总结一下
对于做以产品为核心的创业公司来讲,如何找到产品的切入点是非常重要的。而很多情况下,比较容易找到的产品的切入点是历史上一个相对比较成功的产品在当前的环境下做得不好的地方,然后通过产品的创新去在这方面争取做到最好。这种情况切入由于市场已经存在,就减少了市场的教育过程。剩下的只是如何让客户知道自己并完成客户的迁移。而如果这个时候有更底层环境的大变革,则会让这个产品具备了更加大的可能去取得成功。Redpanda就是在Kafka已经证明了一个市场的存在的前提下,去解决Kafka解决不好的问题。而近几年现代数据技术栈(Modern Data Stack)的所有的公司都是在云上将过去私有化部署时代的数据技术重新用云的方式更好的实现了一遍。突破式创新非常的难,但是更常见的是螺旋式上升的创新,对于我们普通创业者来讲。在底层的逻辑发生改变时,结合已经存在的市场的需求找到合适的切入点去把上一代产品做得不好的地方用新的底层逻辑去改造和重新实现,就能够找到自己的市场空间。