1,簡(jiǎn)單介紹與服務(wù)安裝
1.1,背景
在分布式系統(tǒng)中,我們廣泛運(yùn)用消息中間件進(jìn)行系統(tǒng)間的數(shù)據(jù)交換,便于異步解耦?,F(xiàn)在開(kāi)源的消息中間件有很多.
那么,消息中間件性能究竟哪家強(qiáng)?
帶著這個(gè)疑問(wèn),我們中間件測(cè)試組對(duì)常見(jiàn)的三類(lèi)消息產(chǎn)品(Kafka、RabbitMQ、RocketMQ)做了性能比較。
1.2,三大常用消息中間件
- Kafka是LinkedIn開(kāi)源的分布式發(fā)布-訂閱消息系統(tǒng),目前歸屬于Apache定級(jí)項(xiàng)目。Kafka主要特點(diǎn)是基于Pull的模式來(lái)處理消息消費(fèi),追求高吞吐量,一開(kāi)始的目的就是用于日志收集和傳輸。0.8版本開(kāi)始支持復(fù)制,不支持事務(wù),對(duì)消息的重復(fù)、丟失、錯(cuò)誤沒(méi)有嚴(yán)格要求,適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務(wù)的數(shù)據(jù)收集業(yè)務(wù)。
- RabbitMQ是使用Erlang語(yǔ)言開(kāi)發(fā)的開(kāi)源消息隊(duì)列系統(tǒng),基于AMQP協(xié)議來(lái)實(shí)現(xiàn)。AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱)、可靠性、安全。AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對(duì)數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場(chǎng)景,對(duì)性能和吞吐量的要求還在其次。
- RocketMQ是阿里開(kāi)源的消息中間件,它是純Java開(kāi)發(fā),具有高吞吐量、高可用性、適合大規(guī)模分布式系統(tǒng)應(yīng)用的特點(diǎn)。RocketMQ思路起源于Kafka,但并不是Kafka的一個(gè)Copy,它對(duì)消息的可靠傳輸及事務(wù)性做了優(yōu)化,目前在阿里集團(tuán)被廣泛應(yīng)用于交易、充值、流計(jì)算、消息推送、日志流式處理、binglog分發(fā)等場(chǎng)景。
1.3,三大常用消息中間件的對(duì)比結(jié)果
在同步發(fā)送場(chǎng)景中,三個(gè)消息中間件的表現(xiàn)區(qū)分明顯:
- Kafka的吞吐量高達(dá)17.3w/s,不愧是高吞吐量消息中間件的行業(yè)老大。這主要取決于它的隊(duì)列模式保證了寫(xiě)磁盤(pán)的過(guò)程是線(xiàn)性IO。此時(shí)broker磁盤(pán)IO已達(dá)瓶頸。
- RocketMQ也表現(xiàn)不俗,吞吐量在11.6w/s,磁盤(pán)IO %util已接近100%。RocketMQ的消息寫(xiě)入內(nèi)存后即返回ack,由單獨(dú)的線(xiàn)程專(zhuān)門(mén)做刷盤(pán)的操作,所有的消息均是順序?qū)懳募?/li>
- RabbitMQ的吞吐量5.95w/s,CPU資源消耗較高。它支持AMQP協(xié)議,實(shí)現(xiàn)非常重量級(jí),為了保證消息的可靠性在吞吐量上做了取舍。我們還做了RabbitMQ在消息持久化場(chǎng)景下的性能測(cè)試,吞吐量在2.6w/s左右。
1.4,三大常用消息中間件的測(cè)試結(jié)論
在服務(wù)端處理同步發(fā)送的性能上,Kafka>RocketMQ>RabbitMQ。
1.5,安裝
Ubuntu環(huán)境下安裝RabbitMQ
apt-get install rabbitmq-server備注:以上對(duì)比分析,摘自阿里中間件團(tuán)隊(duì)
Kafka、RabbitMQ、RocketMQ消息中間件的對(duì)比 —— 消息發(fā)送性能
http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/
2, 服務(wù)的啟動(dòng)與關(guān)閉
- 服務(wù)的啟動(dòng)與關(guān)閉
service rabbitmq-server stop/start/status/restart - 啟動(dòng)服務(wù)
rabbitmq-server –detached - 關(guān)閉服務(wù)
rabbitmqctl stop
3,服務(wù)的狀態(tài)查看
查看rabbitmq-server的狀態(tài)
rabbitmqctl status隊(duì)列信息,Queueinfoitem可以為:name, durable,auto_delete,arguments,messages_ready,messages_unacknowledged,messages,consumers,memory
rabbitmqctl list_queues [-p vhostpath] [queueinfoitem ...]Exchange信息,Exchangeinfoitem有:name ,type,durable,auto_delete,internal,arguments
rabbitmqctl list_exchanges [-p vhostpath][exchangeinfoitem ...]Binding信息,Bindinginfoitem有:source_name,source_kind,destination_name,destination_kind,routing_key,arguments
rabbitmqctl list_bindings [-p vhostpath][bindinginfoitem ...]Connection信息,Connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等
rabbitmqctl list_connections [connectioninfoitem ...]Channel信息,Channelinfoitem有consumer_count,messages_unacknowledged,messages_uncommitted,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked
rabbitmqctl list_channels [channelinfoitem ...]
4,Web管理工具
rabbitmqctl是rabbitmq自帶的一個(gè)cli式的管理命令。盡管挺好用的,但是不夠直觀。
rabbitmq還自帶了一個(gè)web管理工具rabbitmq_management,默認(rèn)沒(méi)有開(kāi)啟,需要手動(dòng)開(kāi)啟。
rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart
用瀏覽器打開(kāi)http://192.168.1.89:15672/
默認(rèn)賬號(hào)guest,密碼guest

5,高級(jí)配置管理
5.1,插件管理
- 開(kāi)啟某個(gè)插件
rabbitmq-plugins enable xxx - 關(guān)閉某個(gè)插件
rabbitmq-plugins disable xxx - 注意:重啟服務(wù)器后生效。
5.2,virtual_host管理
- 新建virtual_host
rabbitmqctl add_vhost xxx - 撤銷(xiāo)virtual_host
rabbitmqctl delete_vhost xxx
5.3,用戶(hù)管理
- 新建用戶(hù)
rabbitmqctl add_user xxx pwd - 刪除用戶(hù)
rabbitmqctl delete_user xxx - 改密碼
rabbimqctl change_password {username} {newpassword} - 設(shè)置用戶(hù)角色,Tag可以為administrator, monitoring, management
rabbitmqctl set_user_tags {username} {tag ...}
5.4,權(quán)限管理
- 權(quán)限設(shè)置
set_permissions [-p vhostpath] {user} {conf} {write} {read}
** Vhostpath Vhost路徑
** user 用戶(hù)名
** Conf 一個(gè)正則表達(dá)式match哪些配置資源能夠被該用戶(hù)訪(fǎng)問(wèn)。
** Write 一個(gè)正則表達(dá)式match哪些配置資源能夠被該用戶(hù)讀。
** Read 一個(gè)正則表達(dá)式match哪些配置資源能夠被該用戶(hù)訪(fǎng)問(wèn)。
6,參考頁(yè)面
rabbitmq安裝、配置與管理
http://blog.csdn.net/huoyunshen88/article/details/33738393rabbitmqctl manual page
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html高可用筆記(4)rabbitmq
https://yq.aliyun.com/articles/68656