配色: 字号:
RocketMQ
2016-11-24 | 阅:  转:  |  分享 
  
背景淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认
为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Re
view之后,Kafka无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、
订单、充值等场景下还有诸多特性不满足,为此我们重新用Java语言编写了RocketMQ,定位于非日志的可靠消息传输(日志场景也OK
),目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。Kafk
a与rocketMQ对比Kafka的弱势:Kafka的Replication以topic为单位,支持主机宕机,备机自动切换,切换后
有数据丢失,当leader重启后会与已经存在的leader产生数据冲突。单机写入TPS约百万条/秒消息大小10个字节。kafka单
机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长。kafka使用短轮询方式,消息
实时性取决于轮询间隔时间。kafka消费失败不支持重试。kafka支持消息顺序,但是一台Broker宕机后,就会产生消息乱序。ka
fka不支持定时消息。kafka不支持分布式事务消息。kafka不支持消息查询。开源版本的RocketMQ的优势:不支持Maste
r宕机,Slave自动切换为Master,阿里云版本的RocketMQ支持自动切换特性。RocketMQ单机写入TPS单实例约7万
条/秒,单机部署3个Broker,可以跑到最高12万条/秒,消息大小10个字节RocketMQ单机支持最高5万个队列,Load不会
发生明显变化。RocketMQ使用长轮询,同Push方式实时性一致,消息的投递延时通常在几个毫秒。RocketMQ消费失败支持定时
重试,每次重试间隔时间顺延。RocketMQ支持严格的消息顺序,在顺序消息场景下,一台Broker宕机后,发送消息会失败,但是不会
乱序。RocketMQ支持两类定时消息开源版本RocketMQ仅支持定时Level阿里云ONS支持定时Level,以及指定的毫秒级
别的延时时间阿里云ONS支持分布式定时消息,未来开源版本的RocketMQ也有计划支持分布式事务消息。RocketMQ支持根据Me
ssageId查询消息,也支持根据消息内容查询消息(发送消息时指定一个MessageKey,任意字符串,例如指定为订单Id)前
提:RocketMQ单机支持1万以上的持久化队列,前提是足够的内存、硬盘空间,过期数据数据删除(RocketMQ中的消息队列长度不
是无限的,只是足够大的内存+数据定时删除)RocketMQ消息队列简单部署RocketMQ是alibaba开源的消息队列。环境
系统:CentOS6.x最小化安装需要用到的软件包:jdk-7u67-linux-x64.tar.gzalibaba-rock
etmq-3.1.8.tar.gzjdk的卸载安装java安装路径locatejava测试是否安装jdkJava–versio
n卸载linux自带的jdk卸载默认的:用root用户登陆到系统,打开一个终端输入#rpm-qa|grepgcj显示内容其中
包含下面两行信息#java-1.4.2-gcj-compat-1.4.2.0-27jpp#java-1.4.2-gcj-com
pat-devel-l.4.2.0-27jpp卸载#rpm-ejava-1.4.2-gcj-compat-devel-l.4
.2.0-27jpp#rpm-ejava-1.4.2-gcj-compat-l.4.2.0-27jpp卸载其他自己安装的JD
K就直接用rpm-e卸载rpm版的jdk:#rpm-qa|grepjdk显示:jdk-1.6.0
_10-fcs卸载:#rpm-e--nodeps?jdk-1.6.0_10-fcs安装jdk下载jdk-7u45-linu
x-x64.tar.gz包将其放入服务端:将其解压tar?–zxvfjdk-7u45-linux-x64.tar.gz配置环
境变量vi/etc/profile在其文件后添加JAVA_HOME=/usr/local/jdk1.7.0_45CLASSPA
TH=.:$JAVA_HOME/lib.tools.jarPATH=$JAVA_HOME/bin:$PATHexportJAVA
_HOMECLASSPATHPATH保存退出命令你先按esc键,再输入:最后输入wq回车就可以了强制退出不保存命令你先按
esc键,再输入:最后输入q!回车就可以了修改生效命令source/etc/profile查看其安装包位置命令echo$
JAVA_HOMErocketMQ开始安装wget?https://github.com/alibaba/RocketMQ/rel
eases/download/v3.2.6/alibaba-rocketmq-3.2.6.tar.gz#tarxvfalib
aba-rocketmq-3.2.6.tar.gz配置环境变量:vim/etc/profile(修改环境变量)ROCKETM
Q_HOME=/usr/local/alibaba-rocketmqPATH=$ROCKETMQ_HOME/bin:$PATHes
c键,再输入:最后输入wq回车就可以了source/etc/profile(立即生效)下列命令可执行权限cd/usr/
local/alibaba-rocketmq/bin/;chmod+xmqadminmqbrokermqfiltersrv
mqshutdownmqnamesrvchmod?755?.sh启动服务(测试成功)play.sh(启动服务包含:Se
rverandBroker)或分别启动nameserver(测试失败)#cd/usr/local/alibaba-rock
etmq/bin#nohupshmqnamesrv&验证nameserver是否启动#tail-fnohup.out
TheNameServerbootsuccess.或分别启动broker在启动borker之前需要指点nameserver
#exportNAMESRV_ADDR=Your_IP:9876#cd/opt/alibaba-rocketmq/bin/#n
ohupshmqbroker&验证mqbroker是否启动#tail-fnohup.outThebroker[Yo
ur_hostname,Your_IP:10911]bootsuccess.andnameserverisYour
_IP:9876最后配置防火墙nameserver端口为9876broker端口为10911lokkit-p9876:tcp-p10911:tcp关闭nameserverbroker#/opt/alibaba-rocketmq/bin/#shmqshutdownnamesrv#shmqshutdownbroker至此RockerMQ安装完毕。
献花(0)
+1
(本文系樱梦雪苹宝首藏)