前言

本文档是针对RocketMQ使用及常见问题的说明。

一.获取项目、安装包及文档

1. alibaba/RocketMQ

https://github.com/alibaba/RocketMQ

2. Download the latest release package

https://github.com/alibaba/RocketMQ/releases

3. Get the latest document & Who using RocketMQ

https://github.com/alibaba/RocketMQ/issues/1

二.Linux常用命令

1.切换用户

1)su – root

2)普通用户登录,切换为root用户。

3)带杠表示表示切换到当前用户目录~

2.查询已安装的jdk

1)rpm -qa|grep jdk

2)rpm -qa 查询所有rpm包。q是查询,a是all。竖杠是管道操作符,就是把查询结果作为输入给grep命令。grep jdk是正则匹配带jdk的结果。

3. 卸载jdk

1)rpm -e --nodeps jdk1.8.0_25-1.8.0_25-fcs.x86_64

2)使用 rpm -e --nodeps <包的名字> 不检查依赖,直接删除rpm包

3)erase | don't verify package dependencies

4. Linux服务器之间复制文件或目录

1) scp
Secure copy, similar in function to rcp, copies files between two different networked machines, but does so using authentication, and with a security level similar to ssh.

  1. cp /home/stacy/images/image*.jpg /home/stacy/archive
  2. scp /home/stacy/images/image*.jpg stacy@myhost.com:/home/stacy/archive
  3. scp stacy@myhost.com:/home/stacy/archive/image*.jpg /home/stacy/downloads
  4. scp user@myhost.com:/home/user/dir1/file.txt user@myhost.com:/home/user/dir2
  5. scp someuser@alpha.com:/somedir/somefile.txt someuser@beta.com:/anotherdir

2)move or rename files

mv /old /new

5.安装jdk

1)rpm -i jdk-7u71-linux-x64.rpm

2)执行命令前需进入到文件所在目录

Install/Upgrade/Erase options:

-i, --install                    install package(s)

6.安装rocketmq

1)tar xzvf [some.tar.gz]

x, --extract, --get

Extract files from an archive.

-z, --gzip, --gunzip
This option tells tar to read or write archives through gzip, allowing tar to directly operate on several kinds of compressed archives transparently. This option should be used, for example, when operating on files with the extension .tar.gz.

-v, --verbose

Operate verbosely.

-f, --file=ARCHIVE

Use archive file (or device) ARCHIVE.

7.创建文件夹

1)mkdir myfile

8.删除文件夹

1)rm –rf [dir]

2)参数解释

-f或–force  强制删除文件或目录。

-r或-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。

-v或–verbose  显示指令执行过程。

3)rm  -rf /[dir]/*

9.配置环境变量

1)vi + /etc/profile

2)向文件里面追加以下内容

JAVA_HOME=/usr/java/jdk1.7.0_71

JRE_HOME=/usr/java/jdk1.7.0_71/jre

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

ROCKETMQ_HOME=/app/alibaba-rocketmq

export JAVA_HOME JRE_HOME PATH CLASSPATH ROCKETMQ_HOME

3)使修改立即生效

source /etc/profile

4)查看环境变量值

echo $PATH

5)添加权限写权限

chmod 644 /etc/profile

chmod -R 777 apache-tomcat-server

6)备注

vi filename 打开或新建文件,并将光标置于第一行首

vi +n filename 打开文件,并将光标置于第n行首

vi + filename 打开文件,并将光标置于最后一行首

vi 命令打开文件,i 进入编辑模式 esc进入命令模式

:q! 强制退出不保存

:wq! 强制保存并退出。

profile中export的作用:export命令将使系统在创建每一个新的shell时,定义这个变量的一个拷贝。执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;一个shell中的系统环境变量会被复制到子shell中(用export定义的变量);一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消(并不能返回到父shell中)。不用export定义的变量只对该shell有效,对子shell也是无效的。

10.查看tomcat日志

1)tail -f catalina.out

2)追踪日志,动态显示

3)

tail -f /app/apache-tomcat-server/apache-tomcat-8.0.15-8001/logs/catalina.out

Ctrl + c

11.查看tomcat进程

1)ps -ef |grep tomcat

2)grep 会把列头过滤掉,请注意。

UID

PID

PPID

C

STIME

TTY

TIME

CMD

用户ID

进程ID

父进程ID

CPU占用率

开始时间

开始此进程的TTY

次进程运行的总时间

命令名

12.查看文件夹大小和文件大小和磁盘剩余空间

1)du -h --max-depth=1     一级目录大小

2) du -h --max-depth=1 *error.log

2)du -h                  目录大小

3)ll -h

4)df -hl

5)  df -hl /root    查看/root 目录已使用和可用情况

必要参数:

-a 全部文件系统列表

-h 方便阅读方式显示

-H 等于“-h”,但是计算式,1K=1000,而不是1K=1024

-i 显示inode信息

-k 区块为1024字节

-l 只显示本地文件系统

-m 区块为1048576字节

--no-sync 忽略 sync 命令

-P 输出格式为POSIX

--sync 在取得磁盘信息前,先执行sync命令

-T 文件系统类型

13.杀死进程

1)kill -9 [PID]

14.linux定时任务

1)crontab -e                  编辑任务

2)service crond status          查看服务状态

3)

http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

4)示例

# every hour delete rocketmq logs

* */1 * * * find /root/logs/rocketmqlogs/otherdays/* -exec rm -rf {} \;

三.Broker集群部署

1.系统优化

1)sh $ROCKETMQ_HOME/bin/os.sh

2)在sh命令前加nohup ,执行命令的结果会输出拼接到hohup.out 文件,more hohup.out查看文件内容。否则信息输出到控制台。在命令结尾加$ 是把作业放在后台执行。

2.启动name service

1)sh mqnamesrv &

2)需要进入到bin目录,或者使用全路径

3)当The Name Server boot success.之后,再次启动name service 会报地址已经被占用。

3.Broker 集群部署[多Master多Slave模式,异步复制]

1)进入$ROCKETMQ_HOME/conf/2m-2s-async/ 修改properties配置文件

2)配置文件

broker-a.properties

broker-a-s.properties

broker-b.properties

broker-b-s.properties

3)启动broker

### 在机器 A,启动第一个 Master

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties &

### 在机器 B,启动第一个 Slave

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties &

### 在机器 C,启动第二个 Master

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties &

### 在机器 D,启动第二个 Slave

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties &

4)《开发指导》文档中,详细记录了各个参数,都可以设到properties文件里。

5)启动时可以 -n 指定多个namesrv。例如 sh mqbroker –n "10.128.2.22:9876;10.128.2.23:9876" -c$ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &

6)注意路径sync 和async 不要马虎。推荐namesrv也配置到properties文件中。

7)如果一台机器想启动多个broker ,需要修改监听端口(默认为10911),否则报地址已经被占用。

8)如果Name Server 未启动或者不能连接到服务器,指定该name service 的producer发消息,会报:No route info of this topic。

9)启动第一个broker 不需要指定listenPort ,默认占用10911和10912端口,所以一台机器启动两个broker 时,第二个broker端口应该设置10913,10914 。

listenPort=10913

haListenPort=10914

10)特别注意!!

haListenPort 在《指导》中没有说明。

11)查看系统端口占用情况

netstat -apn|grep 1091

12)详细参数设置需要自行查阅《RocketMQ Developer Guide.pdf》文档。

13)RocketMQ 控制台:

进入 RocketMQ/bin

sh mqadmin

查看哪些命令

sh mqadmin help [命令名]

显示帮助信息

例如执行查看23 server的集群消息

sh mqadmin clusterList -n 10.128.2.23:9876

14)删除topic

sh mqadmin clusterList -n 172.16.50.238:9876

sh mqadmin deleteTopic -c DefaultCluster -n 172.16.50.238:9876 -t USERLOGIN

4.关闭

sh mqshutdown namesrv

sh mqshutdown broker

5.退出

1)exit

2)使用xshell启动服务后,退出时需要用命令exit  。 如果直接点关闭程序按钮关闭终端,会导致刚才的进程被关闭。特别注意!!。

四.验证broker机制

1.方案 master-slave

1)单机启动a、a-s

2)DefaultPushConsumer 设置为单线程

3)consumer 打断点

4)producer 发送10条消息

5)consumer消费一条消息后kill 掉master

6)结果:producer不能继续发送消息,no route info; consumer 可以继续消费剩余的9条信息。

五.项目运行遭遇的问题

1.磁盘空间不够

1)

com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 14  DESC: service not available now, maybe disk full, CL:  0.87 CQ:  0.87 INDEX:  0.87, maybe your broker machine memory too small.

2)位于$HOME/logs/rocketmqlogs/

下的日志文件,占用太多空间。

3)解决问题:修改源码中日志文件位置,参考《RocketMQ自定义文件路径.docx》

2.tomcat服务器挂掉了

1)

20-Apr-2015 00:39:07.158 SEVERE [http-nio-8002-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed

java.io.IOException: Too many open files

at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)

at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241)

at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:688)

at java.lang.Thread.run(Thread.java:745)

2)需要修改tomcat启动参数

3.挂掉了

1)

24-Apr-2015 10:10:48.529 SEVERE [http-nio-8002-ClientPoller-0] org.apache.tomcat.util.net.NioEndpoint$Poller.run

java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Thread.java:714)

at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950)

at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1368)

at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:161)

at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:141)

at org.apache.tomcat.util.net.NioEndpoint.processSocket(NioEndpoint.java:627)

at org.apache.tomcat.util.net.NioEndpoint$Poller.processKey(NioEndpoint.java:1129)

at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1087)

at java.lang.Thread.run(Thread.java:745)

2) producer 发消息改为单例模式,由spring管理。

4. DefaultMQProducer 构造失败,构造参数为空

1)

com.alibaba.rocketmq.client.exception.MQClientException: The producer service state not OK, START_FAILED

See https://github.com/alibaba/RocketMQ/issues/43 for further details.

at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.makeSureStateOK(DefaultMQProducerImpl.java:445)

at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:517)

at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1059)

at com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:122)

at com.alibaba.rocketmq.example.quickstart.Producer.main(Producer.java:53)

2) Spring单例模式的DefaultMQProducer在linux服务器时不好用,发消息失败

The producer service state not OK

原因:参数未取到,出现new DefaultMQProducer(null) 抛异常导致start未调用

解决办法:优化逻辑,保证成功启动

5.rocketmq storeerror.log

2015-04-25 23:00:10 WARN WriteSocketService - findMapedFileByOffset offset not matched, request Offset: 2687768, index: -2, mapedFileSize: 1073741824, mapedFiles count: 2, StackTrace:

java.lang.Thread.getStackTrace(Thread.java:1589)

com.alibaba.rocketmq.common.UtilAll.currentStackTrace(UtilAll.java:63)

com.alibaba.rocketmq.store.MapedFileQueue.findMapedFileByOffset(MapedFileQueue.java:467)

com.alibaba.rocketmq.store.CommitLog.getData(CommitLog.java:156)

com.alibaba.rocketmq.store.CommitLog.getData(CommitLog.java:150)

com.alibaba.rocketmq.store.DefaultMessageStore.getCommitLogData(DefaultMessageStore.java:818)

com.alibaba.rocketmq.store.ha.HAConnection$WriteSocketService.run(HAConnection.java:334)

java.lang.Thread.run(Thread.java:745)

6.

2015-04-25 22:57:57 WARN DispatchMessageService - [BUG]logic queue order maybe wrong, expectLogicOffset: 13047200 currentLogicOffset: 13048100 Topic: MMSI_TOPIC QID: 0 Diff: -900

7.磁盘空间不足,commitlog

1)警告信息 CommitLog.java

2015-04-25 22:57:54 INFO StoreScheduledThread1 - physic disk maybe full soon, so reclaim space, 0.8434144530368926

2015-04-25 22:57:54 INFO StoreScheduledThread1 - begin to delete before 48 hours file. timeup: false spacefull: true manualDeleteFileSeveralTimes: 0 cleanAtOnce: false

2015-04-25 22:57:54 WARN StoreScheduledThread1 - disk space will be full soon, but delete file failed.

2015-04-25 22:57:55 INFO StoreScheduledThread1 - logics disk maybe full soon, so reclaim space, 0.8434167783461006

2015-04-25 22:57:55 INFO StoreScheduledThread1 - begin to delete before 48 hours file. timeup: false spacefull: true manualDeleteFileSeveralTimes: 0 cleanAtOnce: false

2015-04-25 22:57:55 WARN StoreScheduledThread1 - disk space will be full soon, but delete file failed.

2)/**

* 清理逻辑文件服务

*/

class CleanConsumeQueueService

/**

* 清理物理文件服务

*/

class CleanCommitLogService

// 磁盘空间警戒水位,超过,则停止接收新消息(出于保护自身目的)

private final double DiskSpaceWarningLevelRatio = Double.parseDouble(System.getProperty(

"rocketmq.broker.diskSpaceWarningLevelRatio", "0.90"));

3) df -hl /app

df -hl /root

4) du -hl /app

du -hl /root

RocketMQ 使用及常见问题的更多相关文章

  1. rocketmq常见问题

    rocketmq常见问题 以下是关于RocketMQ项目的常见问题 使用 「新创建的Consumer ID从哪里开始消费消息?」 1)如果发送的消息在三天之内,那么消费者会从服务器中保存的第一条消息开 ...

  2. RocketMQ在面试中那些常见问题及答案+汇总

    0.汇总 RocketMQ入门到入土(一)新手也能看懂的原理和实战! RocketMQ入门到入土(二)事务消息&顺序消息 从入门到入土(三)RocketMQ 怎么保证的消息不丢失? Rocke ...

  3. rocketmq常见问题及使用 新手篇

    一 部署阶段 1.启动命令 nameServer启动:nohup sh bin/mqnamesrv  -n ip地址:9876 & broker启动:nohup sh bin/mqbroker ...

  4. 《浅入浅出》-RocketMQ

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点脑图.个人联系方式和技术交流群,欢迎Star和指 ...

  5. rocketmq运维管理

    # 运维管理--- ### 1 集群搭建 #### 1.1 单Master模式 这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用.不建议线上环境使用,可以用于本地测试. #### ...

  6. rocketMq安装及集群配置

    网上关于rocketMq安装.集群配置的文章有很多,作为一个初学者,跟着网上的各种教程安装遇到了各种坑,可谓是一路坎坷.本文记录下rocketMq安装的完整过程.希望对你有一点帮助 安装rocketM ...

  7. 消息队列面试题、RabbitMQ面试题、Kafka面试题、RocketMQ面试题 (史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  8. RabbitMQ,RocketMQ,Kafka 事务性,消息丢失和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 常见的分布式事务解决方案 基于 MQ 实现的分布式事务 本地消息表-最终一致性 MQ事务-最终一致性 RocketMQ中如何处理事务 Kafka中如 ...

  9. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

随机推荐

  1. UEditor自定义toolbar工具条

    使用ueditor的同学都知道,ueditor里有很多功能,很全面,但有时候我们的编辑器不需要太多的功能,比如前台评论或者留言,就不需要这么多功能了,那我们怎么去定制自己想要的工具呢?官方给出了两个方 ...

  2. Spring boot的@Configuration

    就在我惊艳于spring 4的AbstractAnnotationConfigDispatcherServletInitializer小巧简洁(如下)的时候却发现spring boot下面竟然无效. ...

  3. oracle 锁表/解锁 杀进程

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...

  4. wheezy下安装emacs24

    wget -q -O - http://emacs.naquadah.org/key.gpg | sudo apt-key add - vim /etc/apt/sources.list 添加 deb ...

  5. tomcat启动时SessionIdGeneratorBase.createSecureRandom耗时5分钟的问题

    通常情况下,tomcat启动只要2~3秒钟,突然有一天,tomcat启动非常慢,要花5~6分钟,查了很久,终于在这篇文章找到了解决方案,博主牛人啊. 原文参见:http://blog.csdn.net ...

  6. ckplayer的Error #2033:Can not call javascript:ckstyle()解决

    在我们添加多个视频的时候,就会出现这个报错:Error #2033:Can not call javascript:ckstyle(); 但是也不是所有的浏览器都不能正常运行,我这边就是IE10不能正 ...

  7. Windows RDP远程连接CentOS 7

      1. 打开已经安装了CentOS7的主机,以root用户登录,在桌面上打开一个终端,输入命令:rpm -qa|grep epel,查询是否已经安装epel库(epel是社区强烈打造的免费开源发行软 ...

  8. C++11新特性介绍 02

    阅读目录 1. 范围for语句 2. 尾置返回类型 3. =default 生成默认构造函数 4. 类对象成员的类内初始化 5. lambda表达式与bind函数 6. 智能指针share_ptr,u ...

  9. 【CentOS 6.5】 Qt Creator 启动失败

    在CentOS 6.5中 点击 [应用程序]->[编程]->Qt Creator , 没有反应,Creator没有启动,转而进入Shell cd /opt/Qt5.2.1/Tools/Qt ...

  10. javascript instanceof,typeof的区别

    区分string 与 String的区别 为什么结果会是false呢? <script type="text/javascript"> var aColors = [& ...