Disk Flush(磁盘刷新/同步操作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:
SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
Broker Replication(Broker间数据同步/复制):集群环境下需要部署多个Broker,Broker分为两种角色:一种是master,即可以写也可以读,其brokerId=0,只能有一个;另外一种是slave,只允许读,其brokerId为非0。一个master与多个slave通过指定相同的brokerName被归为一个broker set(broker集)。通常生产环境中,我们至少需要2个broker set。Broker Replication只的就是slave获取或者是复制master的数据。
Sync Broker:生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。
Async Broker:生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再“异步复制”到slave。
JDK: 1.8
RocketMQ : 4.1.0-incubating
1.由于官网的4.1.0-incubating下载的是源码,需要maven,git等环境进行编译打包。
2.请下载我在linux编译打包后的文件。
apache-rocketmq-4.1.0.tar.gz
apache-rocketmq-4.1.0.zip
3.在搭建环境前,请仔细了解rocket的集群结构,及每个broker的产生的文件存储结构。
名称 | broker角色 | IP&port |
---|---|---|
nameSer-1 | 注册服务中心 | 172.16.30.13:9876 |
nameSer-2 | 注册服务中心 | 172.16.30.54:9876 |
broker-b-0 | master | 172.16.30.13:10921 |
broker-b-1 | slave | 172.16.30.54:10927 |
broker-a-0 | master | 172.16.30.13:10911 |
broker-a-1 | slave | 172.16.30.54:10917 |
1. 注意每个broker将监听三个端口,例如broker-b-0,本身监听10921,一个fastRemotingService占用你设置的listenPort -2的端口号, 一个HaService占用你listenPort + 1的端口号。
tcp 0 0 *:10919 *:* LISTEN 22813/java
tcp 0 0 *:10921 *:* LISTEN 22813/java
tcp 0 0 *:10922 *:* LISTEN 22813/java
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m
3.修改这个是命令行使用到: target/apache-rocketmq-all/bin/tools.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m"
4.我们一般都采用2个master,2个slave异步复制的集群结构,修改/conf/-2m-2s-async/目录下的配置文件。broker-a-0 master配置,根据需要调整下面的配置
# 统一的集群名字,所有broker要一样
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
# 每天晚上删除4点删除过期的文件
deleteWhen=04
# 文件保存有效时间48小时
fileReservedTime=48
#这里有SYNC_MASTER:同步的主从,ASYNC_MASTER:异步的主从,SLAVE:表示从
brokerRole=SYNC_MASTER
# 刷盘方式
flushDiskType=ASYNC_FLUSH
#一定要配置ip,port
brokerIP1=172.16.30.13
listenPort=10911
# broker所有的文件目录,重要
storePathRootDir=/alidata/server/rocketmq/store_am
# broker 的message消息文件,重要
storePathCommitLog=/alidata/server/rocketmq/store_am/commitlog
#自动创建topic
autoCreateTopicEnable=true
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.8.0_65
warpath=/alidata/server/rocketmq/rocketmq/distribution/target/apache-rocketmq
tomcatpath=/alidata/server/mind_report_dev
#cd $tomcatpath
tomcat_pid=`/usr/sbin/lsof -n -P -t -i:9876`
echo "tomcatpid: $tomcat_pid"
[ -n "$tomcat_pid" ] && kill -15 $tomcat_pid
echo "kill tomcat sucess"
sleep 5
nohup sh bin/mqnamesrv > mqnamesrv.out &
tail -f ~/logs/rocketmqlogs/namesrv.log
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.8.0_65
warpath=/alidata/server/rocketmq/rocketmq/distribution/target/apache-rocketmq
tomcatpath=/alidata/server/mind_report_dev
#cd $tomcatpath
tomcat_pid=`/usr/sbin/lsof -n -P -t -i:10911`
echo "tomcatpid: $tomcat_pid"
[ -n "$tomcat_pid" ] && kill -15 $tomcat_pid
echo "kill tomcat sucess"
sleep 5
nohup sh bin/mqbroker -n '172.16.30.13:9876;172.16.30.54:9876' -c $warpath/conf/2m-2s-async/broker-a.properties >broker-a-m.out &
tail -n 1000 broker-a-m.out
更多命令行操作参考
JDK: 1.8
RocketMQ : rocketmq-console-ng-1.0.0.jar
1.编辑配置启动shell
rocketmq-console-ng-1.0.0.jar
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.8.0_65
warpath=/home/work/tradeSnapshottest
tomcatpath=/alidata/server/tradeSnapshottest
export JAVA_OPT=" -server -Xms256m -Xmx512m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=320m"
tomcat_pid=`/usr/sbin/lsof -n -P -t -i:12581`
echo "tomcatpid: $tomcat_pid"
[ -n "$tomcat_pid" ] && kill -9 $tomcat_pid
echo "kill tomcat sucess"
sleep 5
nohup java -jar ./rocketmq-console-ng-1.0.0.jar --server.port=12581 --rocketmq.config.namesrvAddr='172.16.30.54:9876;172.16.30.13:9876' --rocketmq.config.enableDashBoardCollect=false 2>&1 &
sleep 5
tail -n 1000 nohup.out
2.rocketmq-console是spring-boot工程,修改环境变量设置,rocketmq.config.enableDashBoardCollect=false 关闭自动采集信息,
rocketMQ 3.2 官方文档
RocketMQ最佳实践(一)4.0版本/概念介绍/安装调试/客户端demo
RocketMQ 集群