庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

最近对kafka的移植工作

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

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

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

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

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

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

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

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

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

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

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



评论

# re: 最近对kafka的移植工作  回复  更多评论   

2011-05-07 15:57 by Scud(飞云小侠)
高手...

# re: 最近对kafka的移植工作  回复  更多评论   

2011-05-08 18:12 by hongjiang
通讯框架你换成了什么?

# re: 最近对kafka的移植工作  回复  更多评论   

2011-05-08 18:13 by hongjiang
TBRemoting ?

# re: 最近对kafka的移植工作  回复  更多评论   

2011-05-08 18:45 by dennis
@hongjiang

notify-remoting,notify的通讯框架。

# re: 最近对kafka的移植工作  回复  更多评论   

2011-05-14 21:34 by niumd
scala语言没接触过,想读源码,您的java移植版开源吗?

# re: 最近对kafka的移植工作  回复  更多评论   

2014-03-08 07:56 by tomhanks
请问你是如何做的压测,能具体讲讲吗?

只有注册用户登录后才能发表评论。


网站导航: