RocketMQ学习笔记

 

 

第一章深入剖析高性能RocketMQ4.X实战课程概要

第1集 互联网架构之深入剖析高性能RocketMQ4.X实战课程介绍

简介:深入剖析高性能RocketMQ4.X实战简介、适用人群和学习基础

 

 

 

 

 

 

 

 

愿景:"让编程不在难学,让技术与生活更加有趣" 更多教程请访问 xdclass.net

 

第二章 JMS介绍和消息中间件核心知识

 

第1集 JMS消息服务介绍和使用场景

简介:讲解什么是JMS,消息队列的使用场景

  • 什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口

  • JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API

  • 使用场景:

    • 核心应用

      • 解耦:订单系统-》物流系统
      • 异步:用户注册-》发送邮件,初始化信息
      • 削峰:秒杀、日志处理
    • 跨平台 、多语言

    • 分布式事务、最终一致性

    • RPC调用上下游对接,数据源变动->通知下属

 

 

 

第2集 消息中间件常见概念和编程模型

简介:讲解消息中间件的常见概念和基础编程模型

  • 常见概念

    • JMS提供者:连接面向消息中间件的,JMS接口的一个实现,RocketMQ,ActiveMQ,Kafka等等
    • JMS生产者(Message Producer):生产消息的服务
    • JMS消费者(Message Consumer):消费消息的服务
    • JMS消息:数据对象
    • JMS队列:存储待消费消息的区域
    • JMS主题:一种支持发送消息给多个订阅者的机制
    • JMS消息通常有两种类型:点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)
  • 基础编程模型

    • MQ中需要用的一些类
    • ConnectionFactory :连接工厂,JMS 用它创建连接
    • Connection :JMS 客户端到JMS Provider 的连接
    • Session: 一个发送或接收消息的线程
    • Destination :消息的目的地;消息发送给谁.
    • MessageConsumer / MessageProducer: 消息消费者,消息生产者

 

 

 

第3集 主流消息队列和技术选型讲解

简介:对比当下主流的消息队列和选择问题

  • Apache ActiveMQ、Kafka、RabbitMQ、RocketMQ

    • ActiveMQ:http://activemq.apache.org/

      • Apache出品,历史悠久,支持多种语言的客户端和协议,支持多种语言Java, .NET, C++ 等,基于JMS Provider的实现

      缺点:吞吐量不高,多队列的时候性能下降,存在消息丢失的情况,比较少大规模使用

    • Kafka:http://kafka.apache.org/

      • 是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理大规模的网站中的所有动作流数据(网页浏览,搜索和其他用户的行动),副本集机制,实现数据冗余,保障数据尽量不丢失;支持多个生产者和消费者

      缺点:不支持批量和广播消息,运维难度大,文档比较少, 需要掌握Scala

    • RabbitMQ:http://www.rabbitmq.com/

      • 是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不错

      缺点:使用Erlang开发,阅读和修改源码难度大

    • RocketMQ:http://rocketmq.apache.org/

      • 阿里开源的一款的消息中间件, 纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点, 性能强劲(零拷贝技术),支持海量堆积, 支持指定次数和时间间隔的失败消息重发,支持consumer端tag过滤、延迟消息等,在阿里内部进行大规模使用,适合在电商,互联网金融等领域使用

     

 

 

 

愿景:"让编程不在难学,让技术与生活更加有趣" 更多教程请访问 xdclass.net

 

第三章 RocketMQ4.X基础介绍和阿里云Linux服务器快速部署

第1集 阿里巴巴开源RocketMQ4.x消息队列介绍

简介:阿里开源消息队列 RocketMQ4.x介绍和新概念讲解

  • Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件

  • 特点

    • 支持Broker和Consumer端消息过滤

    • 支持发布订阅模型,和点对点,

    • 支持拉pull和推push两种消息模式

    • 单一队列百万消息、亿级消息堆积

    • 支持单master节点,多master节点,多master多slave节点

    • 任意一点都是高可用,水平拓展,Producer、Consumer、队列都可以分布式

    • 消息失败重试机制、支持特定level的定时消息

    • 新版本底层采用Netty

    • 4.3.x支持分布式事务

    • 适合金融类业务,高可用性跟踪和审计功能。

       

  • 概念

    • Producer:消息生产者

    • Producer Group:消息生产者组,发送同类消息的一个消息生产组

    • Consumer:消费者

    • Consumer Group:消费同类消息的多个实例

    • Tag:标签,子主题(二级分类)对topic的进一步细化,用于区分同一个主题下的不同业务的消息

    • Topic:主题, 如订单类消息,queue是消息的物理管理单位,而topic是逻辑管理单位。一个topic下可以有多个queue,

      默认自动创建是4个,手动创建是8个

    • Message:消息,每个message必须指定一个topic

    • Broker:MQ程序,接收生产的消息,提供给消费者消费的程序

    • Name Server:给生产和消费者提供路由信息,提供轻量级的服务发现、路由、元数据信息,可以多个部署,互相独立(比zookeeper更轻量)

    • Offset: 偏移量,可以理解为消息进度

    • commit log: 消息存储会写在Commit log文件里面

  • 走读官网地址,学会如何学习新技术 http://rocketmq.apache.org/

  • 学习资源

    • http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/
    • https://www.jianshu.com/p/453c6e7ff81c

 

 

 

第2集 RocketMQ4.x本地源码部署(苹果系统底层是Unix系统)

简介:RocketMQ4.x本地快速部署

  • 安装前提条件(推荐) 64bit OS, Linux/Unix/Mac (Windows不兼容) 64bit JDK 1.8+;

  • 快速开始 http://rocketmq.apache.org/docs/quick-start/ 下载安装包:http://mirror.bit.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip

     

     

    unzip rocketmq-all-4.4.0-source-release.zip
    cd rocketmq-all-4.4.0/
    mvn -Prelease-all -DskipTests clean install -U
    cd distribution/target/apache-rocketmq
    最终路径 rocketmq-all-4.4.0/distribution/target/apache-rocketmq

     

  • 最新版本部署存在问题:

    • Please set the JAVA_HOME variable in your environment, We need java(x64)

    • 解决:本地需要配置 JAVA_HOME 使用命令 vim ~/.bash_profile

      •  

         

         
        JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home"
        export JAVA_HOME
        CLASS_PATH="$JAVA_HOME/lib"
        PATH=".$PATH:$JAVA_HOME/bin"
  • 解压压缩包

    • 启动nameServer

       

       

       
       nohup sh bin/mqnamesrv &
    • 查看日志 tail -f nohup.out (结尾:The Name Server boot success. serializeType=JSON 表示启动成功)

    • 启动broker (-n指定nameserver地址,nameserver服务端口为9876, broker默认端口 10911)

       

       

       
      nohup sh bin/mqbroker -n localhost:9876 &
    • 关闭nameserver broker执行的命令

       

       

       
      sh bin/mqshutdown broker
      sh bin/mqshutdown namesrv
    • 使用 jps查看进程

     

 

  • 验证是否成功

     

     

    #设置名称服务地址
    export NAMESRV_ADDR=localhost:9876
    #投递消息
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
    SendResult [sendStatus=SEND_OK, msgId= ...
    #消费消息
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
    ConsumeMessageThread_%d Receive New Messages: [MessageExt...

     

 

 

第3集 源码安装RocketMQ4.x可视化控制台

简介:源码安装RocketMQ4.x可视化控制台

  • 下载 https://github.com/apache/rocketmq-externals

  • 编译打包 mvn clean package -Dmaven.test.skip=true

    • 存在问题,因为roccketmq-console 里面 pom.xml 版本问题
     

     

     
    [ERROR] Failed to execute goal on project rocketmq-console-ng: Could not resolve dependencies for project org.apache:rocketmq-console-ng:jar:1.0.0: The following artifacts could not be resolved: org.apache.rocketmq:rocketmq-tools:jar:4.4.0-SNAPSHOT, org.apache.rocketmq:rocketmq-namesrv:jar:4.4.0-SNAPSHOT, org.apache.rocketmq:rocketmq-broker:jar:4.4.0-SNAPSHOT: Could not find artifact org.apache.rocketmq:rocketmq-tools:jar:4.4.0-SNAPSHOT -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    • 解决 4.4.0-SNAPSHOT

      改为 4.4.0

  • target目录 通过java -jar的方式运行, 启动后是 8080端口

    其他常见问题:

     

     

     
    1)无法连接获取broker信息
        修改配置文件,名称路由地址为 namesrvAddr,例如我本机地址为
        src/main/resources/application.properties
        rocketmq.config.namesrvAddr=127.0.0.1:9876
    2)连接不成功
        在阿里云,腾讯云或者虚拟机,记得检查端口号和防火墙是否启动
        阿里云控制台有安全组,需要开放对应的端口

 

 

 

 

第4集 RocketMQ4.x可视化控制台讲解

简介:讲解新版的RocketMQ可视化管理后台

  • 管理控制台地址 127.0.0.1:8080
测试中遇到的问题
maybe your broker machine memory too small
原因:磁盘空间不够

 

 

 

第5集 阿里云Linux服务器介绍和使用讲解

简介:阿里云服务器介绍和使用讲解

 

 

 

第6集 阿里云Linux服务器部署JDK8实战

简介:在阿里云服务器上安装JDK8和配置环境变量

  • 地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  • linux下使用wget下载jdk8:

    进到目录/usr/local/software 配置环境变量

    解压:tar -zxvf jdk-8u201-linux-x64.tar.gz
    重命名:mv jdk1.8.0_201 jdk8
    vim /etc/profile
    加入
    export JAVA_HOME=/usr/local/software/jdk8
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME PATH CLASSPATH
    使用 source /etc/profile   让配置立刻生效
    
  • windows 命令行工具 :putty
  • windows 远程上传工具: wscp
  • Mac 命令行工具: Item2
  • Mac 远程上传工具 : Filezilla

 

 

 

 

第7集阿里云Linux服务器安装Maven实战

简介: Linux服务器下安装Maven

解压:tar -zxvf apache-maven-3.6.0-bin.tar.gz
重命名: mv apache-maven-3.6.0 maven
vim /etc/profile
export PATH=/usr/local/software/maven/bin:$PATH

立刻生效:source /etc/profile

 

 

 

 

第8集 阿里云服务器源码部署RocketMQ4.X(Linux系统)

简介:官方下载最新源码包,阿里云Linux服务器部署,解决内存不够问题

  • 文档地址:http://rocketmq.apache.org/docs/quick-start/

  • Liunx 解压安装 yum install unzip

  • 常见问题

    • NameServer内存不够怎么处理

      • 找到 runserver.sh 修改 JAVA_OPT

        报错问题如下
        [root@iZwz94sw188z3yfl7lpmmsZ apache-rocketmq]# sh bin/mqnamesrv
        Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
        Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
        Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006ec800000, 2147483648, 0) failed; error='Cannot allocate memory' (errno=12)
        #
        # There is insufficient memory for the Java Runtime Environment to continue.
        # Native memory allocation (mmap) failed to map 2147483648 bytes for committing reserved memory.
        # An error report file with more information is saved as:
        # /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/hs_err_pid8993.log
        
        解决如下 编辑 bin/runserver.sh:
        JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
        
    • Broker内存不足

      • 找到 runbroker.sh 修改 JAVA_OPT

      • JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"
        

         

 

 

第9集 阿里云源码安装RocketMQ4.X控制台(Linux系统)

简介:阿里云服务器安装RocketMQ控制台

  • 上传源码包-》解压-》进入rocketmq-console目录-》 编译打包 mvn clean package -Dmaven.test.skip=true

    务必修改下面两个,再进行编译打包

    • 修改 pom.xml 版本号 (官方bug)
    • 修改application.xml里面的nameserver地址
  • 进入target目录 ,启动 java -jar rocketmq-console-ng-1.0.0.jar

  • 守护进程方式启动 nohup java -jar rocketmq-console-ng-1.0.0.jar &

 

 

 

 

第10集 RocketMQ4.4.X源码导入IDEA

简介:将RocketMQ源码导入IDEA,为后续阅读源码做准备

  • 下载源码,解压,导入即可

 

 

 

 

愿景:"让编程不在难学,让技术与生活更加有趣" 更多教程请访问 xdclass.net

 

第四章 Springboot2.X整合RocketMQ4.X实战

 

第1集 Springboot2.x整合RocketMQ4.x实战发送消息

简介:Springboot2.x整合RocketMQ4.x实战,加入相关依赖,开发生产者代码

注意 :记得启动nameser和broker

  • 快速创建springboot项目 https://start.spring.io/

  • 加入相关依赖

    
    		org.apache.rocketmq
    		rocketmq-client
    		4.3.0
    
    

     

  • Message对象

    • topic: 主题名称
    • tag: 标签,用于过滤
    • key: 消息唯一标示,可以是业务字段组合
    • body: 消息体,字节数组
  • 注意 发送消息到Broker,需要判断是否有此topic启动broker的时候,

    本地环境建议开启自动创建topic,生产环境建议关闭自动化创建topic

    建议先手工创建Topic,如果靠程序自动创建,然后再投递消息,会出现延迟情况

  • 概念模型: 一个topic下面对应多个queue,可以在创建Topic时指定,如订单类topic

  • 通过可视化管理后台查看消息

 

常见错误一

org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException:
sendDefaultImpl call timeout
原因:阿里云存在多网卡,rocketmq都会根据当前网卡选择一个IP使用,当你的机器有多块网卡时,很有可能会有问题。比如,我遇到的问题是我机器上有两个IP,一个公网IP,一个私网IP, 因此需要配置broker.conf 指定当前的公网ip, 然后重新启动broker 
新增配置:conf/broker.conf  (属性名称brokerIP1=broker所在的公网ip地址 )
新增这个配置:brokerIP1=120.76.62.13  

启动命令:nohup sh bin/mqbroker -n localhost:9876  -c ./conf/broker.conf &

常见错误二

MQClientException: No route info of this topic, TopicTest1
原因:Broker 禁止自动创建 Topic,且用户没有通过手工方式创建 此Topic, 或者broker和Nameserver网络不通
解决:
通过 sh bin/mqbroker -m  查看配置
autoCreateTopicEnable=true 则自动创建topic

Centos7关闭防火墙  systemctl stop firewalld

 

常见错误三

控制台查看不了数据,提示连接 10909错误

原因:Rocket默认开启了VIP通道,VIP通道端口为10911-2=10909

解决:阿里云安全组需要增加一个端口 10909

其他错误:

https://blog.csdn.net/qq_14853889/article/details/81053145
https://blog.csdn.net/wangmx1993328/article/details/81588217#%E5%BC%82%E5%B8%B8%E8%AF%B4%E6%98%8E
https://www.jianshu.com/p/bfd6d849f156
https://blog.csdn.net/wangmx1993328/article/details/81588217

 

 

 

 

第2集 Springboot2整合RocketMQ4.x实战消费消息

简介:Springboot2.x整合RocketMQ4.x实战,开发消费者代码,常见问题处理

  • 自动创建topic: autoCreateTopicEnable=true 无效原因:客户端版本要和服务端版本保持一致

  • 创建消费者

     consumer = new DefaultMQPushConsumer(consumerGroup);
            consumer.setNamesrvAddr(nameServerAddr);
            consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
            consumer.subscribe(topic, "*");
            consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
                try {
                Message msg = msgs.get(0);
                System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
                String topic = msg.getTopic();
                String body = new String(msg.getBody(), "utf-8");
                String tags = msg.getTags();
                String keys = msg.getKeys();
                System.out.println("topic=" + topic + ", tags=" + tags + ", keys=" + keys + ", msg=" + body);
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return ConsumeConcurrentlyStatus.RECONSUME_LATER;
                }
            });
    
            consumer.start();
    

     

  • 常见问题

    1、Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.42.1:10911> failed 
    
    2、com.alibaba.rocketmq.client.exception.MQClientException: Send [1] times, still failed, cost [1647]ms, Topic: TopicTest1, BrokersSent: [broker-a, null, null]
    
    3、org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [497]ms, Topic: TopicTest, BrokersSent: [Book-Air.local, 	MacBook-Air.local, MacBook-Air.local]
    解决:多网卡问题处理
    	1、设置producer:  producer.setVipChannelEnabled(false);
    	2、编辑ROCKETMQ 配置文件:broker.conf(下列ip为自己的ip)
    		namesrvAddr = 192.168.0.101:9876
    		brokerIP1 = 192.168.0.101
    
    4、DESC: service not available now, maybe disk full, CL:
    	解决:修改启动脚本runbroker.sh,在里面增加一句话即可:		
    	JAVA_OPT="${JAVA_OPT} -Drocketmq.broker.diskSpaceWarningLevelRatio=0.98"
    	(磁盘保护的百分比设置成98%,只有磁盘空间使用率达到98%时才拒绝接收producer消息)
    	
    常见问题处理
    	https://blog.csdn.net/sqzhao/article/details/54834761
    	https://blog.csdn.net/mayifan0/article/details/67633729
    	https://blog.csdn.net/a906423355/article/details/78192828
    
    

 

 

愿景:"让编程不在难学,让技术与生活更加有趣" 更多教程请访问 xdclass.net

 

第五章 高级篇幅之RocketMQ4.X集群架构讲解

第1集 RocketMQ4.X集群模式架构分析

简介:讲解RocketMQ4.X多种集群模式讲解

  1. 单节点 :

    优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢

    缺点:不可靠,如果宕机,会导致服务不可用

  2. 主从(异步、同步双写) :

    优点:同步双写消息不丢失, 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入

    缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker,重启让从节点成为主节点

  3. 双主:

    优点:配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息

    缺点: master机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响

  4. 双主双从,多主多从模式(异步复制)

    优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从Slave消费

    缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息

  5. 双主双从,多主多从模式(同步双写)

    优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高

    缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机

 

推荐方案2、4、5

 

 

 

第2集 消息可靠性之同步、异步刷盘

简介:讲解什么是同步刷盘和异步刷盘,主从模式如何保障消息可靠性

  • 内存+磁盘
  • 什么是异步刷盘(数据可能丢失,性能高):
  • 什么是同步刷盘:数据安全性高
  • 选择:各有优缺点,看业务需要

 

 

第3集 消息可靠性之同步、异步复制

简介:讲解消息的同步和异步复制

  • Master - Slave节点里面
  • 异步复制 : 数据可能丢失,性能高
  • 同步复制: 数据安全性高,性能低一点
  • 最终推荐这种方式:同步双写(即M-S同步复制),异步刷盘

 

 

 

 

第4集 RocketMQ4.X集群高可用之主从模式搭建上集

简介:使用RocketMQ4.X搭建主从节点上集

 

机器列表

server1 ssh [email protected]
server2 ssh [email protected]
server3 ssh [email protected]
server4 ssh [email protected]

软件:RocketMQ4.X + JDK8 + Maven +CentOS7

 

 

 

第5集 RocketMQ4.X集群高可用之主从模式搭建下集

简介:使用RocketMQ4.X搭建主从节点下集

 

机器列表

server1 ssh [email protected]
server2 ssh [email protected]
server3 ssh [email protected]
server4 ssh [email protected]

 

1、修改RocketMQ(启动内存配置, 两个机器都要修改)

vim runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"


启动两个机器的 nameserver
nohup sh bin/mqnamesrv &


全路径 
/usr/local/software/rocketmq/distribution/target/apache-rocketmq

2、编辑并启动rocketmq命令

主节点
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &

namesrvAddr=192.168.159.129:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
从节点
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &

namesrvAddr=192.168.159.129:9876;192.168.159.130:9876
brokerClusterName=XdclassCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

 

3、使用管控台

修改事项
pom.xml  里面的rocketmq版本号
application.properties里面的nameserver

增加 rocketmq.config.namesrvAddr=192.168.159.129:9876;192.168.159.130:9876

mvn install -Dmaven.test.skip=true

java -jar rocketmq-console-ng-1.0.0.jar

 

参考命令

centos7关闭防火墙 
systemctl stop firewalld

远程拷贝到本地
scp [email protected]:/Users/xdclass/Desktop/xdclass/消息队列/data/第3章/第7集/apache-maven-3.6.0-bin.tar.gz /usr/local/software

scp [email protected]:/Users/xdclass/Desktop/xdclass/消息队列/data/第3章/第7集/apache-maven-3.6.0-bin.tar.gz /usr/local/software  


 

 

 

 

 

 

第6集 故障演练之主节点Broker退出保证消息可用

简介:讲解主节点Broker退出后,从节点可继续被消费者消费

步骤

  • 发送一条消息,关闭主节点,关闭主节点之后不能写入
  • 从节点提供数据供外面消费,但不能接受新消息
  • 主节点上线后同步从节点已经被消费的数据(offset同步)

 

 

第7集 RocketMQ4.X主从同步必备知识点

简介:讲解RocketMQ主从同步必备知识点

 

  • Broker分为master与slave,一个master可以对应多个Slave,但一个slave只能对应一个master,master与slave通过相同的Broker Name来匹配,不同的broker Id来定义是master还是slave

    • Broker向所有的NameServer结点建立长连接,定时注册Topic和发送元数据信息

    • NameServer定时扫描(默认2分钟)所有存活broker的连接, 如果超过时间没响应则断开连接(心跳检测),但是consumer客户端不能感知,consumer定时(30s)从NameServer获取topic的最新信息,所以broker不可用时,consumer最多最需要30s才能发现

      (Producer的机制一样,在未发现broker宕机前发送的消息会失败)

     

  • 只有master才能进行写入操作,slave不允许写入只能同步,同步策略取决于master的配置。

 

  • 客户端消费可以从master和slave消费,默认消费者都从master消费,如果在master挂后,客户端从NameServer中感知到Broker宕机,就会从slave消费, 感知非实时,存在一定的滞后性,slave不能保证master的消息100%都同步过来了,会有少量的消息丢失。但一旦master恢复,未同步过去的消息会被最终消费掉

 

  • 如果consumer实例的数量比message queue的总数量还多的话,多出来的consumer实例将无法分到queue,也就无法消费到消息,也就无法起到分摊负载的作用,所以需要控制让queue的总数量大于等于consumer的数量

 

 

 

 

 

愿景:"让编程不在难学,让技术与生活更加有趣" 更多教程请访问 xdclass.net


 

 

 

你可能感兴趣的:(RocketMQ学习笔记)