Kafka這個(gè)linkedin開源的MQ,我在過去的blog簡單介紹過。最近3周來,我的工作就是做它的一個(gè)Java移植版本,kafka是用scala寫的,基于維護(hù)和定制的角度,這個(gè)拷貝的版本還是用Java。說拷貝,也不盡然,原理相同,但實(shí)現(xiàn)完全換過,從數(shù)據(jù)結(jié)構(gòu)到通訊框架、通訊協(xié)議、程序組織,乃至一些重要功能點(diǎn)上都做了改進(jìn)和更新。我將這個(gè)Java版本取名為metamorphosis,也就是卡夫卡的代表作《變形記》的英文名。
在原版本上,目前做了如下改進(jìn):
1、協(xié)議替換為文本協(xié)議,整個(gè)協(xié)議類似memcached,文本協(xié)議的優(yōu)點(diǎn)自不必說。通訊框架也是采用內(nèi)部使用的通訊框架,減少工作量。
2、存儲(chǔ)結(jié)構(gòu)上也采用自定義結(jié)構(gòu),更簡潔緊湊。
3、kafka原來只支持consumer和broker之間的服務(wù)查找和負(fù)載均衡,meta加入了producer和broker之間的服務(wù)查找和負(fù)載均衡。
4、Consumer API沒有采用kafka的stream方式,而是同時(shí)實(shí)現(xiàn)同步獲取和異步訂閱兩種方式,更接近JMS和Notify。
5、改進(jìn)了服務(wù)器端文件recover的性能,采用并發(fā)多線程recover的方式(可選)。
6、添加了實(shí)時(shí)統(tǒng)計(jì)功能和協(xié)議,類似memcached的stats協(xié)議,響應(yīng)透明號(hào)召。
7、客戶端的連接復(fù)用。
以后要做的事情,可能包括:
1、實(shí)現(xiàn)類似Mysql的master/slave方案,可能還要分為同步和異步兩種模式。
2、分區(qū)擴(kuò)展時(shí)候的數(shù)據(jù)自動(dòng)遷移功能,做到無痛水平擴(kuò)展。
3、高可用方案的另一個(gè)實(shí)現(xiàn)。
4、嵌入Http server做web管理。
工作在本周初步告一段落,接下來是要做集成測(cè)試和壓測(cè)等,我在兩臺(tái)8核16G的機(jī)器上分別部署服務(wù)器和客戶端(訂閱者發(fā)布者同在一臺(tái)),做的一個(gè)簡單壓測(cè)數(shù)據(jù)如下:并發(fā)100個(gè)線程發(fā)送5000萬消息并同時(shí)消費(fèi),1K大小的消息TPS可以達(dá)到3.8萬,4K大小的消息TPS可以達(dá)到1.8萬,服務(wù)器load都維持在一個(gè)較低的水平。從這個(gè)數(shù)據(jù)來看,超過我一開始的預(yù)期。后續(xù)可能做下kakfa的測(cè)試對(duì)比下。
在原版本上,目前做了如下改進(jìn):
1、協(xié)議替換為文本協(xié)議,整個(gè)協(xié)議類似memcached,文本協(xié)議的優(yōu)點(diǎn)自不必說。通訊框架也是采用內(nèi)部使用的通訊框架,減少工作量。
2、存儲(chǔ)結(jié)構(gòu)上也采用自定義結(jié)構(gòu),更簡潔緊湊。
3、kafka原來只支持consumer和broker之間的服務(wù)查找和負(fù)載均衡,meta加入了producer和broker之間的服務(wù)查找和負(fù)載均衡。
4、Consumer API沒有采用kafka的stream方式,而是同時(shí)實(shí)現(xiàn)同步獲取和異步訂閱兩種方式,更接近JMS和Notify。
5、改進(jìn)了服務(wù)器端文件recover的性能,采用并發(fā)多線程recover的方式(可選)。
6、添加了實(shí)時(shí)統(tǒng)計(jì)功能和協(xié)議,類似memcached的stats協(xié)議,響應(yīng)透明號(hào)召。
7、客戶端的連接復(fù)用。
以后要做的事情,可能包括:
1、實(shí)現(xiàn)類似Mysql的master/slave方案,可能還要分為同步和異步兩種模式。
2、分區(qū)擴(kuò)展時(shí)候的數(shù)據(jù)自動(dòng)遷移功能,做到無痛水平擴(kuò)展。
3、高可用方案的另一個(gè)實(shí)現(xiàn)。
4、嵌入Http server做web管理。
工作在本周初步告一段落,接下來是要做集成測(cè)試和壓測(cè)等,我在兩臺(tái)8核16G的機(jī)器上分別部署服務(wù)器和客戶端(訂閱者發(fā)布者同在一臺(tái)),做的一個(gè)簡單壓測(cè)數(shù)據(jù)如下:并發(fā)100個(gè)線程發(fā)送5000萬消息并同時(shí)消費(fèi),1K大小的消息TPS可以達(dá)到3.8萬,4K大小的消息TPS可以達(dá)到1.8萬,服務(wù)器load都維持在一個(gè)較低的水平。從這個(gè)數(shù)據(jù)來看,超過我一開始的預(yù)期。后續(xù)可能做下kakfa的測(cè)試對(duì)比下。