rocketMQ消息队列 ,docker部署rocketMQ 单机、集群

介绍

为了方便大家快速 使用 本人已经 写好了脚本,直接pull 使用


一、RocketMQ 是什么?

rocketmq分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。
目前主流的 MQ 主要是 RocketMQ、kafka、RabbitMQ,其主要优势有:

支持事务型消息(消息发送和 DB 操作保持两方的最终一致性,RabbitMQ 和 Kafka 不支持)
支持结合 RocketMQ 的多个系统之间数据最终一致性(多方事务,二方事务是前提)
支持 18 个级别的延迟消息(Kafka 不支持)
支持指定次数和时间间隔的失败消息重发(Kafka 不支持,RabbitMQ 需要手动确认)
支持 Consumer 端 Tag 过滤,减少不必要的网络传输(即过滤由MQ完成,而不是由消费者完成。RabbitMQ 和 Kafka 不支持)
支持重复消费(RabbitMQ 不支持,Kafka 支持)

二、使用步骤

1.需要 提前 安装 docker

git clone https://github.com/qinxiaohai/rocketmq.git

cd rocketmq
vim rmq/brokerconf/broker.conf
修改 外网ip即可
brokerIP1= 外网IP

#注意 需要安装 docker-compose 
sh start.sh

外部访问 8180 即可rocketMQ消息队列 ,docker部署rocketMQ 单机、集群_第1张图片


单机模式部署

优点:

  1. 本地开发测试,配置简单,同步刷盘消息不会丢失。

缺点:

  1. 不可靠,如果宕机会导致服务不可用。

多主模式

全部由 Broker Master 节点组成(即可能部署两个或者更多 Broker),生产者发送的数据会分别存入不同的 Broker 中,这样能够避免某个 Broker 一直接收处理数据从而负载过高。


多Master多Slave模式-同步双写:

每个Master配置一个Slave,有多对Master-Slave,HA(双机集群)采用同步双写方式,即只有主备都写成功,才向应用返回成功。:

优点:

  1. 数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;

缺点:

  1. 性能比异步复制模式略低(大约低10%左右),发送单个消息的RT(响应时间)会略高,且目前版本在主节点宕机后,备机不能自动切换为主机

双主双从/多主多从模式(异步复制)

每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级)。

优点:
即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍 然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;

缺点:
Master宕机,磁盘损坏情况下会丢失少量消息。

2m-2s-async (2主2从异步) —— 本文采用这种
2m-2s-sync (2主2从同步)
2m-noslave (2主)

开始部署

RcoketMQ Dledger 集群模式 异步复制

下载 地址  https://archive.apache.org/dist/rocketmq/
wget https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
unzip rocketmq-all-4.9.2-bi
n-release.zip
#重命名
mv rocketmq-4.9.2 /usr/local/rocketmq

4、修改启动脚本 修改 内存
vim /usr/local/rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g"

vim /usr/local/rocketmq/bin/runserver.sh 
这一个也是一样


修改服务器1上的配置文件
broker-a.properties
#所属集群名字,同一个集群名字相同
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-a
#0表示master >0 表示slave
brokerId=0
#删除文件的时间点,凌晨4点
deleteWhen=04
#文件保留时间 默认是48小时
fileReservedTime=168
#异步复制Master
brokerRole=ASYNC_MASTER
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10911
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=10.30.1.130:9876;10.30.1.131:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=8
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP 服务器1的ip地址
brokerIP1=10.30.1.130
#存储路径
storePathRootDir=/data/rocketmq/store-a
#commitLog 存储路径
storePathCommitLog=/data/rocketmq/store-a/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/data/rocketmq/store-a/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/store-a/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/store-a/checkpoint
#abort 文件存储路径
abortFile=/data/rocketmq/store-a/abort
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

broker-b-s.properties

# limitations under the License.
brokerClusterName=rocketmq-cluster
brokerName=broker-b
#slave
brokerId=1
deleteWhen=04
fileReservedTime=168
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=11011
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=10.30.1.130:9876;10.30.1.131:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=8
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=10.30.1.130
#存储路径
storePathRootDir=/data/rocketmq/store-b
#commitLog 存储路径
storePathCommitLog=/data/rocketmq/store-b/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/data/rocketmq/store-b/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/store-b/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/store-b/checkpoint
#abort 文件存储路径
abortFile=/data/rocketmq/store-b/abort
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

#部分代码未共享,QQ 857676355

启动nameserver

进入 [root@localhost ~]# cd /usr/local/rocketmq/bin 目录 

启动 nohup sh mqnamesrv &

检验是否安装成功

tail -f ~/logs/rocketmqlogs/namesrv.log

如果此时报错

/usr/local/rocketmq/bin/runserver.sh: line 19: syntax error near unexpected token `$'\r''
'usr/local/rocketmq/bin/runserver.sh: line 19: `error_exit ()
解决方法,拷贝的文件格式错乱使用下面命令乎看到文件后面多了^M
[root@bogon bin]# vim -b runserver.sh 

去掉^M 再重新启动
[root@bogon bin]# sed -i 's/\r//g' runserver.sh

ss -tnap | grep 9876

启动broker master

服务器A 部署 RocketMQ 控制台:

docker run -d --name rmqconsole \
-p 8180:8080 \
--restart=always \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.30.1.130:9876;10.30.1.131:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
docker.io/styletang/rocketmq-console-ng

10、访问控制台

输入 http://192.168.41.247:8180 访问在服务器一部署的 RocketMQ 控制台,进入到如下界面

你可能感兴趣的:(docker,kafka,rabbitmq)