zoukankan      html  css  js  c++  java
  • RocketMQ服务搭建_1

    rocketmq是阿里研发,并贡献给Apache的一款分布式消息中间件。

    RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。

    ACE环境:(Adapted communication environment)自适配通信环境

     ACK:命令应答(Acknowledgement)

    rocketMQ参照jms,但是并不遵循jms规范,因此也就不存在activeMQ的createQueue,createTopic进行ptp连接,直接负载均衡依托于groupName。

    JMS (java message server)的PTP模型:point to point model

    BROKER :中继器(代理人),即RocketMQ服务,也称provider。

    同步刷盘-消息阻塞,能保证数据绝对完整性,异步刷盘-信息丢失,但吞吐量增大。

    订阅者和发布者情况下,会直接广播到group下的所有customer。

    RocketMQ作用:

    •         解耦合
    •        消峰
    •        异步
    •        消息一致性 

    rocketMQ可做到平均分配,不同于其他的mq有随机性分配。

     搭建:

    前提要求:

    rocketMQ由java编写,因此需要jdk环境。

    jdk1.7+,tomcat7.0+,主机64位,

    http://rocketmq.apache.org/dowloading/releases/

    rocketMQ下载解压到指定位置。

    在两台主机上创建/etc/hosts地址和名称。

    192.168.68.137 rocketmq-nameserver1
    192.168.68.138 rocketmq-nameserver2

     创建存储路径:

    [root@localhost program]# mkdir rocketmq/store
    [root@localhost program]# mkdir rocketmq/store/commitlog
    [root@localhost program]# mkdir rocketmq/store/consumequeue
    [root@localhost program]# mkdir rocketmq/store/index

     修改配置文件 rocketmq/config:

    drwxr-xr-x. 2 root root  4096 Sep 19  2017 2m-2s-async    //异步复制
    drwxr-xr-x. 2 root root  4096 Sep 19  2017 2m-2s-sync     //同步双写
    drwxr-xr-x. 2 root root  4096 Sep 19  2017 2m-noslave     //双主

    如果是搭建双主,则进入双主对应的文件夹:

    修改文件rocketmq-a.properties 和 rocketmq-b.properties 

    可参照一下的配置项,注意文件夹路径,和nameserver的host名,以及broker-name.

    RocketMQ 部分 配置项(https://blog.csdn.net/w_x_z_/article/details/70225303)

    配置说明:

    brokerClusterName=rocketmq-cluster      #集群名,多个mq集群需要使用一个统一的名字,最好是按照示例自动给的名字,防止人为输错,导致集群失败。
    brokerName=broker-a #当前主机节点名称,按照mq的惯性进行起名,比如第一个为 brokerName=broker-a,第二个文件为brokerName=broker-b
    brokerId=0 #master节点的ID都为0,>0的数就为Slave。
    namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #用于多个nameserver进行互相发现,注意多个用分号连接,名字和/etc/hosts中保持一致。
    defaultTopicQueueNums=4 #默认设置1个topic对应4个队列。
    autoCreateTopicEnable=true #是否允许自动创建Topic。这种最好设置为false,不然随意注入会造成资源无形损耗,比如我本来消费者只消费T1,T2,
    #但是如果传过来的是T3~T100(恶意攻击),则消费不掉,会在mq中进行积压,因此建议设置为false.
    autoCreateSubscriptionGroup=true #是否允许自动创建订阅组,也是同理最好关闭掉,不让自发产生。
    listenPort=10911 #broker的监听端口号,一个broker会占用3个端口,即10911,10912,10913,同台机器要隔几个端口
    deleteWhen=04 #文件在服务器被删除掉的时间,例 04点的时候被删除。
    fileReservedTime=120 #文件保留最长时间默认是48小时,也就是2天。
    mapedFileSizeCommitLog=1073741824 #commit文件大小限制,超过则会新建一个文件进行保存。commitlog用于存放从producer传递过来的数据内容。
    mapedFileSizeConsumeQueue=300000 #
    每个文件默认存30W条,根据业务情况调整,consumequeue用于存放文件内容索引和topic以及队列的逻辑关系。
    brokerRole=ASYNC_MASTER #可选择同步双写,或异步复制(SYNC_MASTER ASYNC_MASTER SLAVE),如果是从节点就用SLAVE

    #destroyMapedFileIntervalForcibly=120000
    redeleteHangedFileInterval=120000

    # 检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88

    #存储路径
    storePathRootDir=/usr/local/program/rocketmq/store

    #commitLog存储路径
    storePathCommitLog=/usr/local/program/rocketmq/store/commitlog

    #消费队列存储路径
    storePathConsumeQueue=/usr/local/program/rocketmq/store/consumequeue

    # 消息索引存储路径
    storePathIndex=/usr/local/program/rocketmq/store/index

    # checkpoint 文件存储路径
    storeCheckpoint=/usr/local/program/rocketmq/store/checkpoint

    #abort 文件存储路径
    abortFile=/usr/local/program/rocketmq/store/abort

    #限制的消息大小
    maxMessageSize=65536

    # flushCommitLogLeastPages=4
    # flushConsumeQueueLeastPages=2
    # flushCommitLogThoroughInterval=10000
    # flushConsumeQueueThoroughInterval=60000

    # 刷盘方式
    # - ASYNC_FLUSH 异步刷盘
    # - SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH

    #checkTransactionMessageEnable=false

    #发消息线程池数量
    #sendMessageTreadPoolNums=128

    #拉消息线程池数量
    #pullMessageTreadPoolNums=128

    isVIPChannel=false

     注意: brokerRole 我从别人那copy的配置文件,当时这个名称是brokerRote 导致一直Slave不起作用。

                注意用替换的时候storepath,我当当时从服务和主服务交叉,store用的store2,直接用全替换将路径名也替换掉了,导致Slave启动不起来。

    修改logs文件位置,替换文件的存放位置: 因斜杠有特殊意义,因此需要反斜杠做不转义声明

    >mkdir rocketmq/logs
    >cd rocketmq/config && sed -i 's/${user.home}//usr/local/program/rocketmq/g' logback_*.xml

    修改配置文件JAVA_OPT文件:

    查看rocketmq/bin/runbroker.sh rocketmq/bin/runnameserver.sh可以看出以下的java_opt中默认设置的内存达到8G,在生产上可以,但是用虚拟机太大带不起来。

    因此需要全部调整为1G,太小有可能启动不起来。

    JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
    修改为:
    JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

    启动:

           注意:首先要启动所有机器节点的nameServer.然后再启动各节点的broker.

        在ab机器启动nameserver:

          》nohup sh mqnamesrv &

        使用java的jps查看就可以看到nameserver的进程。

         >jps

        在ab机器启动broker,注意a机器用broker-a.properties,b机器用broker-b.properties:

        》nohup sh mqbroker -c /usr/local/program/rocketmq/conf/2m-noslave/broker-a.properties  &

    有时会遇到有这种写法  nohup sh **** >/dev/null >2&1 & 这种是为了在当前目录下不产生nohup.out文件。

       再用jps查看是否已经启动进程。如果发现没有broker的进程,则去logs下查看日志nohup.sh或者broker文件,了解问题。

    至此,服务端的启动就算OK了。

      关闭:》sh mqshutdown broker   (先关闭所有的broker)

                》sh mqshutdown namesrv  (然后再关闭所有的namesrv)

    清理数据:删除掉 store中的文件夹及文件即可。

    RocketMQ的监控服务平台:

    使用教程:RocketMq 监控 之rocketmq-console应用(https://yq.aliyun.com/articles/486069)

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

    目前rocketmq-console使用springboot,因此已经不需要安装tomcat,内嵌有tomcat。

    下载后,修改rocketmq-console的配置文件application.properties。

    修改以下文件:

    rocketmq.config.namesrvAddr=[参见broker-a.properties中namesrvAddr]
    
    isVIPChannel=false
    
    rocketmq.config.dataPath=/usr/local/program/rocketmq-console/data

     不过,也可以先不做修改,在控制台启动后在OPT上添加也可以。

    然后重新打包 >mvn install -DskipTests

    将target中的jar包放入到linux下,启动

    >nohup java -jar /rocketmq-console.jar &

    也可添加参数指定启动的port,和nohup启动文件日志地址  --server.port=12581 > /Disk/temp.txt &

    如果浏览器访问被拒绝,有可能是linux端的防火墙未关闭导致,关闭防火墙后就OK了。

    http://192.168.68.137:8080/

    点击菜单Cluster就可以看到集群的机器,默认会提供一些Topic。

    双主双从的搭建注意事项:

         1. 从节点的brokerId=n,  n>0从节点的数值一定要大于0。

         2. 从节点的brokername名一定要和对应的主节点一致。

         3. 从节点的brokerRote=SLAVE。

         4. 因9876端口为其默认端口,因此也就意味着一台电脑使用一个NameServer。不能存在主节点和从节点部署在一台机子上。

            如果用2个电脑做双主双从,则端口号要不一样且至少隔3位,不然端口占用无法启动,且存储位置不能一样。(仅测试用),生产完全分开。

           可参照文章: https://www.cnblogs.com/buyige/p/9454634.html

    2m-2s sync 同步双写,

    2m-2s async 异步复制。

    从节点一般会做数据备份,只有在主节点宕机时,从节点未被消费内容会被消费,但是从节点不能用于直接生产者写操作。即主从不能互换。

    当主节点重启后,主节点会去从节点查询offset同步offset。这样就防止从消费后主又消费。

          

     

  • 相关阅读:
    一个强大的json解析工具类
    android存储路径问题
    android界面的滑动切换功能
    mysql数据库
    【hadoop+spark】搭建spark过程
    【设计模式】行为型01策略模式(strategy patten)
    【java爬虫】网络爬虫思路
    maven_nexus私服搭建
    【需要重新维护】Redis笔记20170811视频
    【工具】java 文本文档txt写出记录工具
  • 原文地址:https://www.cnblogs.com/DennyZhao/p/9860670.html
Copyright © 2011-2022 走看看