RocketMQ1.1RocketMQ安装及高可用搭建配置(附RocketMQ参数配置文件详解)

叁歲伎倆 2023-06-23 13:22 150阅读 0赞

rocketmq4.5.1
摘要:

消息队列 RocketMQ是低延迟、高并发、高可用、高可靠的分布式消息中间件。该产品最初由阿里巴巴自研并捐赠给 Apache 基金会,服务于阿里集团 13 年,覆盖全集团所有业务。作为双十一交易核心链路的官方指定产品,支撑千万级并发、万亿级数据洪峰,历年刷新全球最大的交易消息流转记录;目前是由Apache基金会维护。
步骤:
一、相关概念

RocketMQ 是阿里巴巴开源的分布式消息中间件。支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。

RocketMQ 特点

  1. 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式等特点
  2. ProducerConsumer、队列都可以分布式
  3. Producer 向一些队列轮流发送消息,队列集合称为 TopicConsumer 如果做广播消费,则一个 Consumer 实例消费这个 Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 Topic 对应的队列集合
  4. 能够保证严格的消息顺序
  5. 支持拉(pull)和推(push)两种消息模式
  6. 高效的订阅者水平扩展能力
  7. 实时的消息订阅机制
  8. 亿级消息堆积能力
  9. 支持多种消息协议,如 JMSOpenMessaging
  10. 较少的依赖

RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer 实例构成。

Name Server:充当路由消息的提供者。是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。在消息队列 RocketMQ 中提供命名服务,更新和发现 Broker 服务。

主要功能为:

  1. 接收broker的请求,注册broker的路由信息
  2. 接收clientproducer/consumer)的请求,根据某个topic获取其到broker的路由信息;NameServer没有状态,可以横向扩展。每个broker在启动的时候会到NameServer注册;Producer在发送消息前会根据topicNameServer获取路由(到broker)信息;Consumer也会定时获取topic路由信息。

Broker:消息中转角色,负责存储消息,转发消息。可以理解为消息队列服务器,提供了消息的接收、存储、拉取和转发服务。broker是RocketMQ的核心,它不不能挂的,所以需要保证broker的高可用。

  1. broker分为 Master Broker Slave Broker,一个 Master Broker 可以对应多个 Slave Broker,但是一个 Slave Broker 只能对应一个 Master Broker
  2. MasterSlave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId0表示Master,非0表示SlaveMaster也可以部署多个。
  3. 每个BrokerName Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name ServerBroker 启动后需要完成一次将自己注册至 Name Server 的操作;随后每隔 30s 定期向 Name Server 上报 Topic 路由信息。

生产者:与 Name Server 集群中的其中一个节点(随机)建立长链接(Keep-alive),定期从 Name Server 读取 Topic 路由信息,并向提供 Topic 服务的 Master Broker 建立长链接,且定时向 Master Broker 发送心跳。

消费者:与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。

Topic:表示消息的第一级类型,比如一个电商系统的消息可以分为:交易消息、物流消息…… 一条消息必须有一个Topic。

Queue:主题被划分为一个或多个子主题,称为“message queues”。一个topic下,我们可以设置多个queue(消息队列)。当我们发送消息时,需要要指定该消息的topic。RocketMQ会轮询该topic下的所有队列,将消息发送出去。

Tags:Tags是Topic下的次级消息类型/二级类型(注:Tags也支持TagA || TagB这样的表达式),可以在同一个Topic下基于Tags进行消息过滤。Tags的过滤需要经过两次比对,首先会在Broker端通过Tag hashcode进行一次比对过滤,匹配成功传到consumer端后再对具体Tags进行比对,以防止Tag hashcode重复的情况。
二、安装及启动

1、从rocketMQ官网下载rocketMQ版本如:rocketmq-all-4.5.1-bin-release.zip

2、解压

unzip rocketmq-all-4.5.1-bin-release.zip

主目录下:

conf目录下:

bin目录下:

3、修改bin/runserver.sh和bin/runbroker.sh中修改下面1-3行注释掉,当然也可以在这个两个配置文件中配置内存:

如果JAVA_HOME配置有问题就可以直接写export JAVA_HOME=/xx/xx/xxx

4、先后启动mqnamesrv和mqbroker,这样一个单机版的rocketmq就安装好了

  1. nohup sh mqnamesrv &
  2. nohup sh mqbroker &

三、高可用配置

RocketMQ在众多消息队列产品中高可用性是其亮点之一,其集群部署方式有很多种。比如单Master模式、多Master模式、多Master多Slave模式(异步复制)、多Master多Slave模式(同步双写)等。明确个概念,RocketMQ Slave不可以写,可以读,类似于MySQL的主从机制。

  1. Master模式:无需多言,一旦单个broker重启或宕机,一切都结束了!很显然,线上不可以使用。
  2. Master模式:全是Master,没有Slave。当然,一个broker宕机了,应用是无影响的,缺点在于宕机的Master上未被消费的消息在Master没有恢复之前不可以订阅。
  3. MasterSlave模式(异步复制):多对Master-Slave,高可用!采用异步复制的方式,主备之间短暂延迟,MS级别。Master宕机,消费者可以从Slave上进行消费,不受影响,但是Master的宕机,会导致丢失掉极少量的消息。
  4. MasterSlave模式(同步双写):和上面的区别点在于采用的是同步方式,也就是在Master/Slave都写成功的前提下,向应用返回成功,可见不论是数据,还是服务都没有单点,都非常可靠!缺点在于同步的性能比异步稍低。

上面的配置也分别对照着conf下面的:

  1. 2m-noslave:多Master模式
  2. 2m-2s-async:多MasterSlave模式(异步复制)
  3. 2m-2s-sync:多MasterSlave模式(同步双写)

此次我们以2m-2s-async为例搭建一个双Name Server,双主从的且异步复制的Broker

假设我们现在有六台机器:192.168.1.131、192.168.2.131、192.168.1.132、192.168.2.132、192.168.1.133、192.168.2.133;一般是分成两个网段。

Name Server:192.168.1.131、192.168.2.131;

Broker-a:192.168.1.132(主)、192.168.2.132(从)

Broker-b:192.168.1.133(主)、192.168.2.133(从)

其中Name Server的配置和单机一样,生产的启动可以如下:

nohup sh bin/mqnamesrv -n “192.168.1.131:9876” > /dev/null 2>&1 &

nohup sh bin/mqnamesrv -n “192.168.2.131:9876” > /dev/null 2>&1 &

Broker服务的配置就是在conf/2m-2s-async/下:

各配置如下:

broker-a.properties:

  1. brokerClusterName=DefaultCluster
  2. brokerName=broker-a
  3. brokerId=0
  4. deleteWhen=04
  5. fileReservedTime=48
  6. brokerRole=ASYNC\_MASTER
  7. flushDiskType=ASYNC\_FLUSH

broker-a-s.properties:

  1. brokerClusterName=DefaultCluster
  2. brokerName=broker-a
  3. brokerId=1
  4. deleteWhen=04
  5. fileReservedTime=48
  6. brokerRole=SLAVE
  7. flushDiskType=ASYNC\_FLUSH

broker-b.properties:

  1. brokerClusterName=DefaultCluster
  2. brokerName=broker-b
  3. brokerId=0
  4. deleteWhen=04
  5. fileReservedTime=48
  6. brokerRole=ASYNC\_MASTER
  7. flushDiskType=ASYNC\_FLUSH

broker-b-s.properties

  1. brokerClusterName=DefaultCluster
  2. brokerName=broker-b
  3. brokerId=1
  4. deleteWhen=04
  5. fileReservedTime=48
  6. brokerRole=SLAVE
  7. flushDiskType=ASYNC\_FLUSH

上面都是默认配置;我们这里最少每个文件都需要增加配置:

namesrvAddr=192.168.1.131:9876;192.168.2.131:9876

再接着依次启动192.168.1.132(主)、192.168.2.132(从)、192.168.1.133(主)、192.168.2.133(从):

nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties > /dev/null 2>&1 &

nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties > /dev/null 2>&1 &

nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties > /dev/null 2>&1 &

nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties > /dev/null 2>&1 &

启动后可以使用jps查看对应的进程是否启动成功
四、常用配置

broker的常用配置如下:

  1. \#所属集群名字
  2. brokerClusterName=DefaultCluster
  3. \#broker名字,注意此处不同的配置文件填写的不一样
  4. brokerName=broker-b
  5. \#0表示Master,>0表示Slave
  6. brokerId=1
  7. \#nameServer地址,分号分割
  8. namesrvAddr=192.168.1.131:9876;192.168.2.131:9876
  9. \#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
  10. \#删除文件时间点,默认凌晨 4
  11. deleteWhen=04
  12. \#文件保留时间,默认 48 小时
  13. fileReservedTime=48
  14. \#Broker 的角色
  15. \#- ASYNC\_MASTER 异步复制Master
  16. \#- SYNC\_MASTER 同步双写Master
  17. \#- SLAVE
  18. brokerRole=SLAVE
  19. \#刷盘方式
  20. \#- ASYNC\_FLUSH 异步刷盘
  21. \#- SYNC\_FLUSH 同步刷盘
  22. flushDiskType=ASYNC\_FLUSH
  23. \#其他配置
  24. \#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
  25. defaultTopicQueueNums=4
  26. \#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
  27. autoCreateTopicEnable=true
  28. \#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
  29. autoCreateSubscriptionGroup=true
  30. \#Broker 对外服务的监听端口
  31. listenPort=10911
  32. \#commitLog每个文件的大小默认1G
  33. mapedFileSizeCommitLog=1073741824
  34. \#ConsumeQueue每个文件默认存30W条,根据业务情况调整
  35. mapedFileSizeConsumeQueue=300000
  36. \#destroyMapedFileIntervalForcibly=120000
  37. \#redeleteHangedFileInterval=120000
  38. \#检测物理文件磁盘空间
  39. diskMaxUsedSpaceRatio=88
  40. \#存储路径
  41. storePathRootDir=/usr/local/alibaba-rocketmq/store
  42. \#commitLog 存储路径
  43. storePathCommitLog=/usr/local/alibaba-rocketmq/store/commitlog
  44. \#消费队列存储路径存储路径
  45. storePathConsumeQueue=/usr/local/alibaba-rocketmq/store/consumequeue
  46. \#消息索引存储路径
  47. storePathIndex=/usr/local/alibaba-rocketmq/store/index
  48. \#checkpoint 文件存储路径
  49. storeCheckpoint=/usr/local/alibaba-rocketmq/store/checkpoint
  50. \#abort 文件存储路径
  51. abortFile=/usr/local/alibaba-rocketmq/store/abort
  52. \#限制的消息大小
  53. maxMessageSize=65536
  54. \#flushCommitLogLeastPages=4
  55. \#flushConsumeQueueLeastPages=2
  56. \#flushCommitLogThoroughInterval=10000
  57. \#flushConsumeQueueThoroughInterval=60000

————————————————
版权声明:本文为CSDN博主「叶落自飘零」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010904188/article/details/103597089

发表评论

表情:
评论列表 (有 0 条评论,150人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RocketMQ配置

    [RocketMQ][] Apache RockerMQ是一个分布式消息传递引擎,轻量级的数据处理平台。 它具有以下的特性: 低延迟: 高压下在1毫米内响应延