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. root root Sep 2m-2s-async //异步复制
drwxr-xr-x. root root Sep 2m-2s-sync //同步双写
drwxr-xr-x. root root Sep 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。这样就防止从消费后主又消费。
RocketMQ服务搭建_1的更多相关文章
- ServiceStack.Hello——跨平台.net REST api服务搭建
ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...
- WCFRESTFul服务搭建及实现增删改查
WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格, RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...
- 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...
- Git服务搭建及github使用教程
.pos { position: fixed; top: 35%; left: 90% } .pos a { border: 2px solid white; background: #99CCFF; ...
- eureka服务搭建
Server端 引入eureka server的maven依赖 引入依赖时无需给定eureka的版本号,maven会根据当前使用的SpringCloud版本来判断应该引入哪个版本的euraka ser ...
- NodeJs之服务搭建与数据库连接
NodeJs之服务搭建与数据库连接 一,介绍与需求分析 1.1,介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻 ...
- JumpServer1.0 服务搭建
JumpServer1.0 服务搭建 系统环境配置 setenforce 0 systemctl stop iptables.service systemctl stop firewalld.serv ...
- Linux-ftp服务搭建
云服务器ESC 部署vsftpd服务 记一次ftp服务搭建的采坑过程,这个坑一直卡了很久时间,都给忘记了.最近由于公司项目需要部署FTP,经过各种采坑,终于把这个坑给填上了.废话不多说,开干 环境说明 ...
随机推荐
- re模块小结
一.引子: 文件err.txt中有如下内容: 要求提取出所有的电话号码来. 方法一:文件操作法: f = open('eer.txt','r',encoding='utf-8') l = [] for ...
- Spring Boot 学习视频
1. Spring Boot 项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot 项目实 ...
- linux下的环境变量配置
方法一: 方法二:
- js四则运算增强功能
目录 背景 具体代码 背景 项目中用到浮点数,Int. 在 js中 Number类型比较古怪, 加上牵涉到财务软件, 前台js实时运算等. 有时候会出现精确度的问题 , 公共方法中有好事者写的方法. ...
- C#存储过程 传入参数 传出参数 结果集
作者:卞功鑫 转载请保留:http://www.cnblogs.com/BinBinGo/p/6400928.html //1 连接字符串 string connectionString = &quo ...
- mysql实现自增函数
这两天在思考怎么生成数据库随机名称,思前想后觉得还是利用自增的逻辑主键是最方便快捷的,于是便尝试着获取一种自增的mysql函数 自增mysql函数 BEGIN DECLARE id INT DEFAU ...
- Kafka分布式集群部署
这个是kafka的官网地址:http://kafka.apache.org/ 1.kafka是一个消息系统. 2.kafka对流数据可以高效的实时处理. 3.分布式集群的环境下能够保证数据的安全. k ...
- 使用路由和远程访问服务为Hyper-V中虚拟机实现NAT上网
众所周知,在微软的Hyper-V环境中的网络环境中没有VMware Workstation中的NAT功能,所以Hyper-V环境中虚拟机上网一般情况下需要通过设置为外部网络方可访问网络,当然也可设置为 ...
- JVM总结-Java 虚拟机是怎么识别目标方法(下)
1. 虚方法调用 在上一篇中我曾经提到,Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用都会被编译成 invokeinterface 指令.这两种指令, ...
- [python,2018-01-15] 冒泡法排序
想写一个冒泡法排序,没什么思路,就先写了个java的 public static void main(String[] args) { int array[] = {88,2,43,12,34,8,6 ...