首先對(duì)MQ的技術(shù)選型需要考慮的因素有哪些
- 業(yè)內(nèi)常用的MQ有哪些呢
- 每一種MQ的表現(xiàn)如何
- 這些MQ在同等機(jī)器條件下综苔,能抗多少Q(mào)PS(每秒扛幾千QPS還是幾萬QPS)
- 性能有多高(發(fā)一條消息給它需要2ms還是20ms)
- 可用性能不能得到保證(要是MQ部署的機(jī)器掛了該怎么辦)
- 它們會(huì)不會(huì)丟失數(shù)據(jù)
- 如何需要的時(shí)候惩系,能否讓它們進(jìn)行線性的擴(kuò)容(就是多加幾臺(tái)機(jī)器)
- 消息中間件經(jīng)常需要用的一些功能有么(比如:延遲消息、事務(wù)消息如筛、消息堆積堡牡、消息回溯、死信隊(duì)列等)
- 這些MQ的文檔是否齊全杨刨,社區(qū)的活躍度咋樣晤柄,在行業(yè)內(nèi)是否廣泛使用,是采用什么語言開發(fā)的妖胀。
Kafka芥颈、RabbitMQ、RocketMQ的調(diào)研比對(duì)
(1)Kafkade 優(yōu)勢(shì)和劣勢(shì)
優(yōu)勢(shì):
在性能方面kafka可以說是業(yè)界非常優(yōu)秀的一款中間件赚抡,在常規(guī)的機(jī)器配置下爬坑,一臺(tái)機(jī)器可以達(dá)到每秒幾十萬的QPS。并且Kafka的性能也非常高涂臣,基本上發(fā)給kafka的消息都是毫米級(jí)別的盾计,可用性也特別高,kafka是支持集群部署的,并且其中部分機(jī)器宕機(jī)署辉,還是可以運(yùn)行的族铆。
劣勢(shì):
kafka有可能會(huì)丟失數(shù)據(jù),因?yàn)閗afka收到消息之后哭尝,會(huì)寫一個(gè)磁盤緩沖區(qū)里哥攘,并沒有直接落地到物理磁盤上去,所以機(jī)器故障之后刚夺,可能會(huì)導(dǎo)致磁盤緩沖區(qū)的數(shù)據(jù)丟失献丑。另外一個(gè)缺點(diǎn)就是,kafka的功能比較單一侠姑,主要是支持發(fā)送消息給它,然后從里面消費(fèi)消息箩做,其它就沒有什么額外的高級(jí)功能了莽红,所以基于kafka有限的功能,可能適用的場(chǎng)景并不是很多邦邦。
綜上所述:一般公司會(huì)利用kafka收集一些日志之類的消息安吁,因?yàn)槿罩疽话懔刻貏e大,即使丟幾條數(shù)據(jù)也沒事燃辖,并且要求吞吐量也高鬼店,一般就是收發(fā)消息,不需要太多的功能黔龟,所以kafka非常適合這個(gè)場(chǎng)景妇智。
(2)RabbitMQ的優(yōu)勢(shì)和劣勢(shì)
優(yōu)勢(shì):
在RocketMQ沒有出現(xiàn)之前,好多公司都從ActiveMQ切換到了RabbitMQ氏身,它的優(yōu)勢(shì)在于可以保證數(shù)據(jù)不丟失巍棱,也能保證高可用性,即使集群部署部分機(jī)器宕機(jī)也能運(yùn)行蛋欣,然后支持部分高級(jí)功能航徙,比如死信隊(duì)列,消息重試之類的陷虎。
缺點(diǎn):
RabbitMQ的吞吐量比較低到踏,一般就是幾萬的級(jí)別,如果遇到特別高的并發(fā)時(shí)尚猿,支撐起來有點(diǎn)困難窝稿。并且進(jìn)行集群的擴(kuò)展也是比較麻煩的。還有就是開發(fā)語言用的是erlang谊路,國內(nèi)使用此語言的很少讹躯,所以對(duì)其深入的研究也是比較麻煩的。
(3)RocketMQ
優(yōu)點(diǎn):
RocketMQ幾乎同時(shí)解決了Kafka和RabbitMQ的缺陷。它的吞吐量也非常高潮梯,單機(jī)可以達(dá)到10萬的QPS以上骗灶,而且可以保證高可用性,并且可以通過配置達(dá)到數(shù)據(jù)保證不會(huì)丟失秉馏,可以部署大規(guī)模的集群耙旦,還支持各種高級(jí)功能,比如說延遲消息萝究、事務(wù)消息免都、消息回溯、死信隊(duì)列帆竹、消息積壓等绕娘。而且RocketMQ是利用java開發(fā)的,符合國內(nèi)的大多數(shù)公司的技術(shù)棧栽连,很容易進(jìn)行閱讀源碼和修改其內(nèi)容险领。
缺點(diǎn):
RocketMQ的官方文檔相比較于kafka和RabbitMQ來說的話會(huì)相對(duì)簡單一些,沒有人家kafka和RabbitMQ的文檔寫的詳細(xì)秒紧。