Posted on 2011-05-07 10:46
dennis 閱讀(5528)
評論(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的測試對比下。