RocketMQ实战(一)

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> RocketMQ实战(一)

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!

作者:张丰哲 www.jianshu.com/p/3afd610a8f7d

www.jianshu.com/p/3afd610a8f7d

阅****读

1. 

****2. ****

3. 

****4. ****

阿里巴巴有2大核心的分布式技术,一个是OceanBase,另一个就是RocketMQ。在实际项目中已经领教过RocketMQ的强大,RocketMQ实战系列,将涵盖RocketMQ的简介,环境搭建,初步使用、API详解、架构分析、管理员集群操作等知识。

What is RocketMQ?

RocketMQ作为一款分布式的消息中间件(阿里的说法是不遵循任何规范的,所以不能完全用JMS的那一套东西来看它),经历了Metaq1.x、Metaq2.x的发展和淘宝双十一的洗礼,在功能和性能上远超ActiveMQ。

  • 要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。
  • RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证!
  • RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟!
  • 丰富的消息拉取模式(Push or Pull) Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记录的问题(如果不记录,会导致消息重复消费)。

  • 在Metaq1.x/2.x的版本中,分布式协调采用的是Zookeeper,而RocketMQ自己实现了一个NameServer,更加轻量级,性能更好!
  • 消息失败重试机制、高效的订阅者水平扩展能力、强大的API、事务机制等等(后续详细介绍)
  • 初步理解Producer/Consumer Group

    ActiveMQ中并没有Group这个概念,而在RocketMQ中理解Group的机制很重要。

    RocketMQ实战(一)

    Group机制

    想过没有,通过Group机制,让RocketMQ天然的支持消息负载均衡!

    比如某个Topic有9条消息,其中一个Consumer Group有3个实例(3个进程 OR 3台机器),那么每个实例将均摊3条消息!(注意RocketMQ只有一种模式,即发布订阅模式。)

    install RocketMQ

    RocketMQ的Broker集群部署模式还挺多的,比如单Master模式、多Master模式、多Master多Slave模式(异步复制)、多Master多Slave模式(同步双写)等。明确个概念,RocketMQ Slave不可以写,可以读,类似于MySQL的主从机制。

    单Master模式:

    无需多言,一旦单个broker重启或宕机,一切都结束了!很显然,线上不可以使用。

    多Master模式:

    全是Master,没有Slave。当然,一个broker宕机了,应用是无影响的,缺点在于宕机的Master上未被消费的消息在Master没有恢复之前不可以订阅。

    多Master多Slave模式(异步复制):

    多对Master-Slave,高可用!采用异步复制的方式,主备之间短暂延迟,MS级别。Master宕机,消费者可以从Slave上进行消费,不受影响,但是Master的宕机,会导致丢失掉极少量的消息。

    多Master多Slave模式(同步双写):

    和上面的区别点在于采用的是同步方式,也就是在Master/Slave都写成功的前提下,向应用返回成功,可见不论是数据,还是服务都没有单点,都非常可靠!缺点在于同步的性能比异步稍低。

    这里我将采用2个Master的方式进行搭建演示,会了双Master,其他的将很简单。(多Master在实际中也是非常常用的,如果并发非常大,考虑多Master多Slave模式)

    RocketMQ实战(一)

    双Master模式架构

    在192.168.99.121/122机器上各一个NameServer、Master进程。

    以192.168.99.121为例:

    第一步,修改/etc/hosts文件

    RocketMQ实战(一)

    hosts配置

    RocketMQ实战(一)

    确保相互之间可以ping通

    第二步,解压并创建存储路径

    
    tar -xvf alibaba-rocketmq-3.2.6.tar.gz
    
    mkdir -p alibaba-rocketmq/store/{commitlog,consumequeue,index}
    

    第三步,配置文件

    RocketMQ实战(一)

    broker-x.properties

    上面已经将实际中常用的配置项给出来了!

    RocketMQ实战(一)

    配置项

    第四步,修改日志配置文件

    RocketMQ实战(一)

    注意到logback.*.xml配置文件中:

    RocketMQ实战(一)

    需要替换${user.name}

    可以使用sed进行替换:

    
    sed -i 's#${user.home}#/software/alibaba-rocketmq#g' *.xml
    

    第五步,修改启动脚本中的JVM参数

    RocketMQ实战(一)

    vim runbroker.sh/rumserver.sh

    注意,在这里我将JVM的堆的初始化和最大大小统一设置为1G,并将新生代大小设置为512M。主要是考虑到我的虚拟机内存,实际上在线上是可以走默认的4G堆内存的。

    第六步,启动NameServer

    
    nohup sh mqnamesrv &
    

    RocketMQ实战(一)

    NameServer

    RocketMQ实战(一)

    nameserver启动日志

    第七步,启动broker-X

    RocketMQ实战(一)

    启动broker

    注意观察日志:

    RocketMQ实战(一)

    broker.log

    RocketMQ实战(一)

    进程与端口

    第八步:RocketMQ Console

    把rocketmq-console.war部署到Tomcat下即可。

    RocketMQ实战(一)

    解压WAR包

    RocketMQ实战(一)

    在解压WAR包后的CLASS下更改config.properties

    RocketMQ实战(一) RocketMQ实战(一)

    这个管控台实际上还是比较简陋的,我们使用比较多的是mqadmin操作命令,后续会介绍。

    OK,到这里,双Master的搭建已经完成了!

    看完本文有收获?请转发分享给更多人

    RocketMQ实战(一)

    原文始发于微信公众号(Java知音):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> RocketMQ实战(一)


      转载请注明: 好好学java RocketMQ实战(一)

     上一篇
    ActiveMQ从入门到精通(三) ActiveMQ从入门到精通(三)
    点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:张丰哲 www.jianshu.com/p/79f8a0457069 www.jianshu.com/p/79f8a0457069 推荐阅****读
    2021-04-05
    下一篇 
    为什么Redis 单线程却能支撑高并发? 为什么Redis 单线程却能支撑高并发?
    点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:Draveness draveness.me/redis-io-multiplexing draveness.me/redis-io-mu
    2021-04-05