前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache RocketMQ 集群搭建(两主两从)

Apache RocketMQ 集群搭建(两主两从)

作者头像
zoro
发布2019-04-11 15:35:57
6.9K0
发布2019-04-11 15:35:57
举报
文章被收录于专栏:Java开发者Java开发者

Apache RocketMQ 集群搭建(两主两从)

Apache RocketMQ 系列:

Apache RocketMQ之JMS基本概念及使用:https://cloud.tencent.com/developer/article/1412675

Apache RocketMQ 基础概念及架构解析:https://cloud.tencent.com/developer/article/1412649

Apache RocketMQ 的基础特性介绍:https://cloud.tencent.com/developer/article/1412645

Apache RocketMQ 集群搭建(两主两从):https://cloud.tencent.com/developer/article/1412653

Apache RocketMQ 刷盘策略与复制策略: https://cloud.tencent.com/developer/article/1412663

优秀博客:

https://www.jianshu.com/p/b30142c17ad0?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation


RocketMQ 架构图

1.png

消息中间件和RPC最大区别:Broker Cluster存储

NameServer: 提供轻量级的服务发现和路由。 每个 NameServer 记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展。

Broker: 通过提供轻量级的 Topic 和 Queue 机制来处理消息存储,同时支持推(push)和拉(pull)模式以及主从结构的容错机制。

Producer:生产者,产生消息的实例,拥有相同 Producer Group 的 Producer 组成一个集群。

Consumer:消费者,接收消息进行消费的实例,拥有相同 Consumer Group 的

Consumer 组成一个集群。

从 Broker 开始,Broker Master1 和 Broker Slave1 是主从结构,它们之间会进行数据同步,即 Date Sync。同时每个 Broker 与

NameServer 集群中的所有节

点建立长连接,定时注册 Topic 信息到所有 NameServer 中。

Producer 与 NameServer 集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Broker Master 建立长连接,且定时向 Broker 发送心跳。

Producer 只能将消息发送到 Broker master,但是 Consumer 则不一样,它同时和提供 Topic 服务的 Master 和 Slave

建立长连接,既可以从 Broker Master 订阅消息,也可以从 Broker Slave 订阅消息。


RocketMQ 集群部署模式
单 master 模式:

优点:除了配置简单没什么优点,适合个人学习使用。

缺点:不可靠,该机器重启或宕机,将导致整个服务不可用。

多 master 模式:

多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。

优点:所有模式中性能最高

缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。

注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。

多 master 多 slave 异步复制模式:

在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master

节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。

优点: 在 master 宕机时,消费者可以从 slave读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。

缺点:使用异步复制的同步方式有可能会有消息丢失的问题。

多 master 多 slave 同步双写模式:

同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。

优点:同步双写的同步模式能保证数据不丢失。

缺点:发送单个消息 RT 会略长,性能相比异步复制低10%左右。

刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)

同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)

注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低。


开始集群搭建:2M-2S-SYNC(两主两从同步写)
软件依赖:
环境介绍:

IP

部署服务

角色

192.168.5.100

NameServer

--

192.168.5.101

NameServer

--

192.168.5.100

broker-a

master

192.168.5.100

broker-b-s

slave

192.168.5.101

broker-b

master

192.168.5.101

broker-a-s

slave

环境变量配置:
代码语言:javascript
复制
#设置jdk环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_191  #jdk安装目录

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

export PATH=$PATH:${JAVA_PATH}

#设置 rocketmq 环境变量
export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-4.2

export PATH=$PATH::$ROCKETMQ_HOME/bin
防火墙设置:

如果是开发环境 # service iptables stop 直接关闭防火墙

若是生产环境就需要配置防火墙,增加端口规则,默认nameserver端口是9876,笔者直接就关闭防火墙服务。

注:另一台机器也是如此操作!
解压完成后创建目录:
代码语言:javascript
复制
mkdir /usr/local/rocketmq/rocketmq-4.2/data/store 存储路径

mkdir /usr/local/rocketmq/rocketmq-4.2/data/store/commitlog  commitLog 存储路径

mkdir /usr/local/rocketmq/rocketmq-4.2/data/store/consumequeue 消费队列存储路径存储路径

mkdir /usr/local/rocketmq/rocketmq-4.2/data/store/index 消息索引存储路径

[root@node-100 store]# pwd
/usr/local/rocketmq/rocketmq-4.2/data/store
[root@node-100 store]# ls
checkpoint  commitlog  config  consumequeue  index  lock  slave
[root@node-100 store]# 
修改配置文件:
代码语言:javascript
复制
[root@node-100 2m-2s-sync]# pwd
/usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync
[root@node-100 2m-2s-sync]# ls
broker-a.properties  broker-a-s.properties  broker-b.properties  broker-b-s.properties  nohup.out
[root@node-100 2m-2s-sync]# vim broker-a.properties
192.168.5.100机器配置如下:
broker-a.properties:
代码语言:javascript
复制
#所属集群名称,如果多个master,那么每个master配置的名称应该一致,要不然识别不了
brokerClusterName=rocketmq-cluster
#broker名称
brokerName=broker-a
#0 表示master,>0 表示slave
brokerId=0
#nameServer地址,分号隔开
namesrvAddr=192.168.5.100:9876;192.168.5.101:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=true
#broker对外服务的监听端口,
#同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些
listenPort=10911
#删除文件的时间节点,默认凌晨4点
deleteWhen=04
#文件保留时间,默认48小时
fileReservedTime=120
#commitLog每个文件的大小,默认大小1g
mapedFileSizeCommitLog=1073741824
#consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
#检查物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#store存储路径,master与slave目录要不同
storePathRootDir=/usr/local/rocketmq/rocketmq-4.2/data/store
#commitLog存储路径
storePathCommitLog=/usr/local/rocketmq/rocketmq-4.2/data/store/commitlog
#限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
#发消息线程池数
sendMessageThreadPoolNums=128
#拉去消息线程池数
pullMessageThreadPoolNums=128
#broker角色:
#ASYSC_MASTER 异步复制master
#SYSC_MASTER 同步复制master
#SLAVE 从
brokerRole=SYSC_MASTER
#刷盘方式
#ASYNC_FLUSH 异步刷盘
#SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
broker-b-s.properties:
代码语言:javascript
复制
brokerClusterName=rocketmq-cluster
brokerName=broker-b
#0 -> master ,>0 -> slave
brokerId=1
namesrvAddr=192.168.5.100:9876;192.168.5.101:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10950
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq/rocketmq-4.2/data/store/slave
storePathCommitLog=/usr/local/rocketmq/rocketmq-4.2/data/store/slave/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
192.168.5.101机器配置如下:
broker-a-s.properties:
代码语言:javascript
复制
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
namesrvAddr=192.168.5.100:9876;192.168.5.101:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10950
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq/rocketmq-4.2/data/store/slave
storePathCommitLog=/usr/local/rocketmq/rocketmq-4.2/data/store/slave/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
broker-b.properties:
代码语言:javascript
复制
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
namesrvAddr=192.168.5.100:9876;192.168.5.101:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq/rocketmq-4.2/data/store
storePathCommitLog=/usr/local/rocketmq/rocketmq-4.2/data/store/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
brokerRole=SYSC_MASTER
flushDiskType=ASYNC_FLUSH
修改日志配置文件:
代码语言:javascript
复制
#创建日志目录
mkdir -p /usr/local/rocketmq/rocketmq-4.2/logs

#替换*.xml文件中的{user.home}为自己指定的目录
cd /usr/local/rocketmq/rocketmq-4.2/conf && sed -i 's#${user.home}#/root/svr/rocketmq#g'
*.xml
改参数:

runbroker.sh,runserver.sh启动参数默认对jvm的堆内存设置比较大(不改启动不起来),如果是虚拟机非线上环境需要改下参数,大小可以根据自己机器来决定。

代码语言:javascript
复制
[root@node-100 bin]# pwd
/usr/local/rocketmq/rocketmq-4.2/bin
[root@node-100 bin]# ls
cachedog.sh       mqadmin.cmd   mqbroker.numanode0  mqbroker.xml     mqnamesrv      mqshutdown.cmd  play.sh        runbroker.sh   startfsrv.sh
cleancache.sh     mqadmin.xml   mqbroker.numanode1  mqfiltersrv      mqnamesrv.cmd  nohup.out       README.md      runserver.cmd  tools.cmd
cleancache.v1.sh  mqbroker      mqbroker.numanode2  mqfiltersrv.cmd  mqnamesrv.xml  os.sh           runbroker      runserver.sh   tools.sh
mqadmin           mqbroker.cmd  mqbroker.numanode3  mqfiltersrv.xml  mqshutdown     play.cmd        runbroker.cmd  setcache.sh
[root@node-100 bin]# 
runbroker.sh:
代码语言:javascript
复制
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
runserver.sh:
代码语言:javascript
复制
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT}  -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
注意:两次机器都要设置!

如果还是出现内存问题,可尝试修改下面几个文件:

代码语言:javascript
复制
[root@node-100 bin]# pwd
/usr/local/rocketmq/rocketmq-4.2/bin
[root@node-100 bin]# ls *.xml
mqadmin.xml  mqbroker.xml  mqfiltersrv.xml  mqnamesrv.xml
[root@node-100 bin]# 

将这几个文件中下面参数给删掉:

代码语言:javascript
复制
-XX:PermSize    设置持久代(perm gen)初始值  物理内存的1/64    
-XX:MaxPermSize 设置持久代最大值    物理内存的1/4

开始启动:
先启动namesrv(两台都要启动):
代码语言:javascript
复制
[root@node-100 bin]# cd /usr/local/rocketmq/rocketmq-4.2/bin
[root@node-100 bin]# nohup sh mqnamesrv &
[1] 2601
[root@node-100 bin]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@node-100 bin]# jps
2604 NamesrvStartup
2621 Jps
[root@node-100 bin]# 

因为rocketmq是java开发的,所以通过jps命令查看namesrv有没有启动,当然通过日志文件也可以,namesrv正常启动之后,后续再分别启动Broker。

启动BrokerServer(两台都要启动):
192.168.5.100:
broker-a.properties:
代码语言:javascript
复制
[root@node-100 bin]# nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync/broker-a.properties &
[2] 2646
[root@node-100 bin]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@node-100 bin]# jps
2681 Jps
2650 BrokerStartup
2604 NamesrvStartup
[root@node-100 bin]# 
broker-b-s.properties:
代码语言:javascript
复制
[root@node-100 bin]# nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync/broker-b-s.properties &
[3] 2729
[root@node-100 bin]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@node-100 bin]# 
[root@node-100 bin]# jps
2789 Jps
2650 BrokerStartup
2604 NamesrvStartup
2733 BrokerStartup
[root@node-100 bin]# 
192.168.5.101:
broker-b.properties:
代码语言:javascript
复制
[root@node-101 bin]# nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync/broker-b.properties &
[2] 7621
[root@node-101 bin]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@node-101 bin]# 
[root@node-101 bin]# jps
7570 NamesrvStartup
7667 Jps
7625 BrokerStartup
[root@node-101 bin]# 
broker-a-s.properties:
代码语言:javascript
复制
[root@node-101 bin]# nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync/broker-a-s.properties &
[3] 7701
[root@node-101 bin]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@node-101 bin]# jps
7570 NamesrvStartup
7625 BrokerStartup
7705 BrokerStartup
7774 Jps
[root@node-101 bin]# 
启动完成,查看集群信息:
代码语言:javascript
复制
[root@node-100 bin]# sh mqadmin clusterlist -n 192.168.5.100:9876
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
rocketmq-cluster  broker-a                0     192.168.5.100:10911    V4_2_0_SNAPSHOT          0.00(0,0ms)         0.00(0,0ms)          0 429538.48 0.2738
rocketmq-cluster  broker-a                1     192.168.5.101:10950    V4_2_0_SNAPSHOT          0.00(0,0ms)         0.00(0,0ms)          0 429538.48 0.2734
rocketmq-cluster  broker-b                0     192.168.5.101:10911    V4_2_0_SNAPSHOT          0.00(0,0ms)         0.00(0,0ms)          0 429538.48 0.2734
rocketmq-cluster  broker-b                1     192.168.5.100:10950    V4_2_0_SNAPSHOT          0.00(0,0ms)         0.00(0,0ms)          0 429538.48 0.2738
[root@node-100 bin]# 
启动成功!

测试:

可以启动RocketMQ的监控查看:

监控源码下载地址:

https://github.com/apache/rocketmq-externals.git

配置namesrv

rocketmq.config.namesrvAddr=192.168.5.100:9876

或者:

代码语言:javascript
复制
export NAMESRV_ADDR=192.168.5.100:9876;192.168.5.101:9876
#测试发送端
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
#测试消费端
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

停止命令:

代码语言:javascript
复制
[root@node-101 bin]# sh mqshutdown broker
The mqbroker(7625
7705) is running...
Send shutdown request to mqbroker(7625
7705) OK
[root@node-101 bin]# sh mqshutdown namesrv
The mqnamesrv(7570) is running...
Send shutdown request to mqnamesrv(7570) OK
[3]+  退出 143              nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync/broker-a-s.properties
[2]+  退出 143              nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-4.2/conf/2m-2s-sync/broker-b.properties
[root@node-101 bin]# 

本次RocketMQ 集群搭建顺利完成:)。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache RocketMQ 集群搭建(两主两从)
    • RocketMQ 架构图
      • RocketMQ 集群部署模式
        • 单 master 模式:
          • 多 master 模式:
            • 多 master 多 slave 异步复制模式:
              • 多 master 多 slave 同步双写模式:
                • 开始集群搭建:2M-2S-SYNC(两主两从同步写)
                  • 软件依赖:
                  • 环境介绍:
                  • 环境变量配置:
                  • 防火墙设置:
                  • 注:另一台机器也是如此操作!
                  • 解压完成后创建目录:
                  • 修改配置文件:
                  • 192.168.5.100机器配置如下:
                  • broker-a.properties:
                  • broker-b-s.properties:
                  • 192.168.5.101机器配置如下:
                  • broker-a-s.properties:
                  • broker-b.properties:
                  • 修改日志配置文件:
                  • 改参数:
                  • runbroker.sh:
                  • runserver.sh:
                  • 注意:两次机器都要设置!
                  • 开始启动:
                  • 先启动namesrv(两台都要启动):
                  • 启动BrokerServer(两台都要启动):
                  • 192.168.5.100:
                  • broker-a.properties:
                  • broker-b-s.properties:
                  • 192.168.5.101:
                  • broker-b.properties:
                  • broker-a-s.properties:
                  • 启动完成,查看集群信息:
                  • 启动成功!
                  • 测试:
                  • 本次RocketMQ 集群搭建顺利完成:)。
              相关产品与服务
              消息队列 TDMQ
              消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档