rocketmq 简介与安装

1 rocketmq简介

RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:

        1.能够保证严格的消息顺序

        2.提供丰富的消息拉取模式

        3.高效的订阅者水平扩展能力

        4.实时的消息订阅机制

        5.亿级消息堆积能力

        消息中间件是典型的生产者-消费者模型,核心作用是解耦,生产者和消费者彼此没有直接依赖,同步化解成了异步

原理:

        1.  零拷贝原理:

        Consumer消费消息过程,使用了零拷贝,零拷贝包含以下两种方式:

        1)   使用mmap+write方式:

        优点:即使频繁调用,使用小块文件传输,效率也很高

        缺点:不能很好的利用DMA方式,会比sendfile多消耗CPU,内存安全性控制复杂,需要避免JVM Crash问题

        2)   使用sendfile方式:

        优点:可以利用DMA方式,消耗CPU较少,大块文件传输效率高,无内存安全新问题

        缺点:小块文件效率低于mmap方式,只能是BIO方式传输,不能使用NIO

        RocketMQ选择了第一种方式,mmap+write方式,因为有小块数据传输的需求,效果会比sendfile更好。

        RocketMQ队列

        1)   RocketMQ队列:

        所有数据单独存储到一个Commit Log,完全顺序写,随机读。

        对最终用户展现的队列实际只存储消息在Commit Log的位置信息,并且串行方式刷盘。

        2)   优点

        队列轻量化,单个队列数据量非常少

        对磁盘的访问串行化,避免磁盘竟争,不会因为队列增加导致IO WAIT增高

        3)   缺点

        写虽然完全是顺序写,但是读却变成了完全的随机读

        读一条消息,会先读Consume Queue,再读Commit Log,增加了开销

        要保证Commit Log与Consume Queue完全的一致,增加了编程的复杂度

        4)commitlog重要性

        CommitLog中存储了所有的元信息,包含消息体,类似于Mysql、Oracle的redolog,所以只要有CommitLog在,Consume Queue即使数据丢失,仍然可以恢复出来。

        刷盘策略

        RocketMQ的所有消息都是持久化的,先写入系统PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据,访问时直接从内存读取。

        同步刷盘与异步刷盘的唯一区别是异步刷盘写完PAGECACHE直接返回,而同步刷盘需要等待刷盘完成才返回,同步刷盘流程如下:

        1 写入PAGECACHE后,线程等待,通知刷盘线程刷盘

        2 刷盘线程刷盘后,唤醒前端等待线程,可能是一批线程

        3 前端等待线程向用户返回成功

        初步理解Producer/Consumer Group

Group机制:

通过Group机制,让RocketMQ天然的支持消息负载均衡!,比如某个Topic有9条消息,其中一个Consumer Group有3个实例(3个进程 OR 3台机器),那么每个实例将均摊3条消息!(注意RocketMQ只有一种模式,即发布订阅模式。)

RocketMQ的负载均衡:

        RocketMQ提供了两种消息队列轮询:一种是根据Hash值进行轮询,另一种是随机方式

组件介绍:

        Name Server是RocketMQ的寻址服务。用于把Broker的路由信息做聚合。客户端依靠Name Server决定去获取对应topic的路由信息,从而决定对哪些Broker做连接。         

  •        Name Server是一个几乎无状态的结点,Name Server之间采取share-nothing的设计,互不通信。
    • 对于一个Name Server集群列表,客户端连接Name Server的时候,只会选择随机连接一个结点,以做到负载均衡。
    • Name Server所有状态都从Broker上报而来,本身不存储任何状态,所有数据均在内存。
    • 如果中途所有Name Server全都挂了,影响到路由信息的更新,不会影响和Broker的通信。

Broker是处理消息存储,转发等处理的服务器

  •         Broker以group分开,每个group只允许一个master,若干个slave。
    • 只有master才能进行写入操作,slave不允许。
    • slave从master中同步数据。同步策略取决于master的配置,可以采用同步双写,异步复制两种。
    • 客户端消费可以从master和slave消费。在默认情况下,消费者都从master消费,在master挂后,客户端由于从Name Server中感知到Broker挂机,就会从slave消费。
    • Broker向所有的NameServer结点建立长连接,注册Topic信息。

2 rocketmq安装(双主集群部署)

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

        2.2 配置ip映射 (修改俩台master中的hosts文件:)

 

        为避免服务器重名出现,建议进行以下操作:

  

        2.3 修改RocketMQ配置

        master1服务器

        master2服务器

        2.4 服务启动(2台机器都要做)

        修改日志配置文件

        【替换.xml文件中的主机名】

        修改启动脚本参数(2台都要配置)

 

        打开runserver配置文件

 

        启动NameServer

 

        启动Broker (master1和master2都要这样做)

 

3 部署管控台

        3.1首先下载https://github.com/apache/incubator-rocketmq-externals

        3.2 修改配置文件

        server.port 为运行的这个web应用的端口,如果不设置的话默认为8080;

        rocketmq.config.namesrvAddr 为rocketmq服务器地址,如果不设置的话默认为“”

        rocketmq.config.dataPath 为mq的数据目录,可自定义设置

 

        3.3  编译rocketmq-console

        打包完以后会生产target目录

        将jar拷到mq目录(这里不是必须的,放在一起是方便后续管理)

        3.4. 启动jar包

 

        表示已经起来了

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值