【Rocketmq】RocketMQ单机&集群浅入浅出

本文详细介绍了RocketMQ的四种集群模式,包括单点、主从、双主及双主双从、多主多从,分析了各自的优缺点和适用场景。重点讨论了同步刷盘和异步刷盘策略以及同步复制和异步复制的区别。最后提供了单机部署和集群部署的示例配置。

Rocketmq集群模式

1、单点(不推荐,测试使用)

  • 优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
  • 缺点:不可靠,如果宕机,会导致服务不可用

2、主从

主节点可收发消息,从节点不能接收消息。 具备 HA。不支持主从切换。

  • 优点:同步双写消息不丢失, 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入
  • 缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker, 重启让从节点成为主节点

3、双主(不推荐)

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

  • 注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。
  • 优点:所有模式中性能最高。配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息
  • 缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。

4、双主双从、多主多从

  • 双主双从

多 master 多 slave 异步复制
在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。

  • 优点:在 master 宕机时,消费者可以从 slave读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。
  • 缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息
    多 master 多 slave 同步双写
    同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。
  • 优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
  • 缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机

刷盘策略

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

同步刷盘

数据写入内存后并未实时写入数据盘,写入数据盘之后才返回写入成功。 数据安全性高。

异步刷盘

数据写入内存后即返回写入成功,但此时并未实时写入数据盘。 数据可能丢失,性能高。

同步方式

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

同步复制

数据安全性高,性能低一点

异步复制

数据可能丢失,性能高

选择

保证数据可靠情况:同步刷盘和同步双写的方式,但性能会较其他方式低。
保证性能又可靠的情况下,采用同步双写,异步刷盘
目前采用这种方式:同步双写,异步刷盘

单机部署

编辑docker-compose.yml, IP需要修改成对应服务器的IP

version: "3.8"
services:
  roacket_namesrv:
    image: 7024253/rocketmq_namesrv:1.0
    network_mode: host
    hostname: rocketmq.namesrv.1
    container_name: rocketmq.namesrv.1
    environment:
      listenPort: 9876
    volumes:
      - /data/services/rocketmq/data/namesrv/logs:/root/logs
      - /data/services/rocketmq/data/namesrv/store:/root/store
    deploy:
      resources:
        limits:
          memory: 1G
    restart: unless-stopped 
  rocketmq_broker:
    image: 7014253/rocketmq_broker:1.0
    network_mode: host
    hostname: rocketmq.broker.1
    container_name: rocketmq.broker.1
    extra_hosts:
      - "rocketmq.broker.1:172.16.0.11"
      - "rocketmq.namesrv.1:172.16.0.11"
    environment:
      MAX_POSSIBLE_HEAP: 100000000
      NAMESRV_ADDR: 'rocketmq.namesrv:9876'
    volumes:
      - /data/services/rocketmq/data/namesrv/logs:/root/logs
      - /data/services/rocketmq/data/namesrv/store:/root/store
    env_file:
      - broker.env
  rocketmq_dashbaord:
    image: 7014253/rocketmq_dashboard:1.0
    network_mode: host
    hostname: rocketmq.dashboard
    container_name: rocketmq.dashboard
    extra_hosts:
      - "rocketmq.namesrv.1:172.16.0.11"
      - "rocketmq.broker.1:172.16.0.11"
    environment:
      JAVA_OPTS: '-Dserver.port=17070 -Drocketmq.config.namesrvAddr=rocketmq.broker:9876 -Drocketmq.config.isVIPChannel=false'

broker.env

par.brokerName=broker-a
par.brokerId=0
# 同步双写
par.brokerRole=SYNC_MASTER
# 异步刷盘
par.flushDiskType=ASYNC_FLUSH
add.listenPort=10911
par.deleteWhen=04
par.fileReservedTime=48
add.brokerIP1=manyun.rocketmq.broker.1

启动后访问IP:17070就可以看到dashboard。

集群部署

namesrv:3台
broker:4台
dashboard:1台
太长了,懒得编辑了。下次有空再弄

### Docker 中 RocketMQ 单机集群配置教程 #### 一、环境准备 在开始之前,需确认已安装并运行 Docker 环境。可以通过以下命令验证 Docker 是否正常工作: ```bash docker version ``` 如果未安装 Docker 或版本较低,则需要先完成安装或升级。 --- #### 二、启动 NameServer 和 Broker 实例 NameServer 是 RocketMQ 的注册中心,Broker 负责消息存储和转发功能。以下是基于 Docker 启动单机模式下的 RocketMQ 集群的具体操作: 1. **拉取官方镜像** 使用阿里云提供的 RocketMQ 官方镜像来部署服务。 ```bash docker pull apache/rocketmq:latest ``` 2. **启动 NameServer** 创建一个容器用于运行 NameServer 组件,并映射端口到宿主机。 ```bash docker run -d \ --name rocketmq-nameserver \ -p 9876:9876 \ apache/rocketmq:latest \ sh mqnamesrv ``` 此处 `-p` 参数表示将容器内的 `9876` 端口映射至本地机器的相同端口号[^2]。 3. **启动 Broker** 接下来创建另一个容器作为 Broker 节点连接刚才建立好的 NameServer。 ```bash docker run -d \ --name rocketmq-broker \ -e "NAMESRV_ADDR=host.docker.internal:9876" \ -p 10911:10911 \ -p 10909:10909 \ apache/rocketmq:latest \ sh mqbroker -n host.docker.internal:9876 autoCreateTopicEnable=true ``` 这里设置了两个重要参数: - `NAMESRV_ADDR`: 指定 NameServer 地址为当前宿主机 IP (`host.docker.internal`) 及其监听端口 `9876`; - 自动主题启用标志设置为 true,允许动态创建新 topic[^2]。 4. **验证组件状态** 登录到任意一台虚拟服务器或者本机执行下面两条指令分别查看 name server list 和 broker info 来判断是否成功搭建好整个架构体系结构。 ```bash docker exec -it rocketmq-cli bash ./tools.sh org.apache.rocketmq.tools.admin.TopicListCmd -n localhost:9876 ``` --- #### 三、管理控制台 (Optional) 为了更方便地监控与调试系统性能表现情况,可以额外引可视化工具——rocketmq-console-ng 。按照先前描述的方法即可轻松实现这一目标。 1. **获取最新镜像资源文件包** ```bash docker pull pangliang/rocketmq-console-ng ``` 2. **定义具体的服务实例名称以及暴露外部访问接口地址范围等基本信息项** ```bash docker run -d \ --restart=always \ --name rmqadmin \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=<your_nameserver_ip>:9876 \ -Dserver.port=7001 \ -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ -p 7001:7001 \ pangliang/rocketmq-console-ng ``` 替换 `<your_nameserver_ip>` 成实际使用的内部网络 ip 地址[^1]。 通过浏览器打开链接 http://localhost:7001 ,输默认用户名密码 admin/admin 登陆后台管理系统界面。 --- ### 总结 以上即是在 Linux/MacOS 平台上利用 Docker 技术快速构建起一套完整的 Apache RocketMQ 分布式消息中间件解决方案的过程概述。它不仅简化了传统方式下繁琐的手工配置流程步骤,而且还能有效提升开发效率的同时降低运维成本开销。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锅霍皮久

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值