Kafka这个linkedin开源的MQ,我在过去的blog简单介绍过。最近3周来,我的工作就是做它的一个Java移植版本,kafka是用scala写的,基于维护和定制的角度,这个拷贝的版本还是用Java。说拷贝,也不尽然,原理相同,但实现完全换过,从数据结构到通讯框架、通讯协议、程序组织,乃至一些重要功能点上都做了改进和更新。我将这个Java版本取名为metamorphosis,也就是卡夫卡的代表作《变形记》的英文名。

在原版本上,目前做了如下改进:
1、协议替换为文本协议,整个协议类似memcached,文本协议的优点自不必说。通讯框架也是采用内部使用的通讯框架,减少工作量。

2、存储结构上也采用自定义结构,更简洁紧凑。

3、kafka原来只支持consumer和broker之间的服务查找和负载均衡,meta加入了producer和broker之间的服务查找和负载均衡。

4、ConsumerAPI没有采用kafka的stream方式,而是同时实现同步获取和异步订阅两种方式,更接近JMS和Notify。

5、改进了服务器端文件recover的性能,采用并发多线程recover的方式(可选)。

6、添加了实时统计功能和协议,类似memcached的stats协议,响应透明号召。

7、客户端的连接复用。

以后要做的事情,可能包括:
1、实现类似Mysql的master/slave方案,可能还要分为同步和异步两种模式。

2、分区扩展时候的数据自动迁移功能,做到无痛水平扩展。

3、高可用方案的另一个实现。

4、嵌入Httpserver做web管理。

工作在本周初步告一段落,接下来是要做集成测试和压测等,我在两台8核16G的机器上分别部署服务器和客户端(订阅者发布者同在一台),做的一个简单压测数据如下:并发100个线程发送5000万消息并同时消费,1K大小的消息TPS可以达到3.8万,4K大小的消息TPS可以达到1.8万,服务器load都维持在一个较低的水平。从这个数据来看,超过我一开始的预期。后续可能做下kakfa的测试对比下。