rocket mq单机版和集群版

rocketmq

优点:解耦、削峰(削弱瞬时并发对服务器的压力)、数据分发

缺点:

    系统可用性降低。一点MQ宕机,就会对业务造成影响

    如何保证MQ的高可用?

    系统复杂度提高。由服务之间远程同步到现在通过MQ进行异步调用

    如何保证消息没有被重复消费?

    怎么处理消息丢失?

    怎么保证消息传递的顺序性?

    一致性问题。

    如mq给A、B、C三个系统发送消息。如果BC处理成功,A处理失败,怎么保证消息数据处理的一致性?

安装

下载

http://rocketmq.apache.org/release_notes/release-notes-4.9.1/
或者
wget https://archive.apache.org/dist/rocketmq/4.6.0/rocketmq-all-4.6.0-bin-release.zip

​​

将下载的zip包上传到服务器使用命令解压
unzip rocketmq-all-4.9.1-bin-release.zip

启动nameserv,进入到bin目录下:

nohup sh ./mqnamesrv &
查看启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log

启动broken

nohup sh ./mqbroker -n localhost:9876 &
查看启动日志
tail -f ~/logs/rocketmqlogs/broker.log

修改配置文件

默认配置是8g启动,修改为合适的内存
vim runbroker.sh
vim runserver.sh

退出服务

mqshutdown broker
mqshutdown namesrv

测试mq消息

开启两个窗口
临时环境变量,窗口1
export NAMESRV_ADDR=localhost:9876
生产消息
sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer
窗口2
export NAMESRV_ADDR=localhost:9876
消费消息
sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

集群方式

在这里插入图片描述

集群模式

多master模式

一个集群无Slave(从),全是master
优点:
配置简单,单个Master宕机或者重启维护对应用无影响,消息不会丢失、性能高
缺点:
单机宕机期间,未被消费的消息在机器恢复之前不可订阅,消息实时性受到影响

多master多Slave模式(异步)

每个master(主机)配置一个(多个)Slave(从机),采用异步复制方式同步信息,
优点:
消息丢失非常少,消息实时性不会受到影响,master宕机期间,消费者仍然可以从slave中订阅消息
缺点:
master宕机,磁盘损坏的情况下会少量消息丢失(异步处理,在未同步消息的时候主机宕机,造成数据不同步丢失问题)

多master多Slave模式(同步)

优点:
数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:
性能比异步复制模式低,发送单个消息的时间会略高,且主节点宕机后从节点不能切换为主机

配置环境变量( 多master多Slave模式(同步))

vim /etc/profile
在文末添加
ROCKETMQ_HOME= /opt/rocketmq # mq安装路径
PATH= P A T H : PATH: PATH:ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

最后保存退出刷新文件
source /etc/profile

创建消息存储路径

mq默认的消息存储是:
在这里插入图片描述

自定义路径

mkdir /opt/rocketmq/store
mkdir /opt/rocketmq/store/commitlog
mkdir /opt/rocketmq/store/consumequeue
mkdir /opt/rocketmq/store/index
在这里插入图片描述
在这里插入图片描述
文件配置要主从分开,分别在服务器1上备注a主b从,在服务器2上配置b主从
a主配置

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=a服务器IP:9876;b服务器IP:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

配置差别就是

#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole 从机选择slave
brokerId 从机值为 > 0
brokerName 主从一致
listenPort 从机端口区分,监听端口不能一样

启动集群

nohup sh mqnamesrv & #启动nameserver
nohup sh mqbroker -c …/conf/2m-2s-sync/broker-b-s.properties &
启动broker
同样的方式启动主从

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值