RocketMQ 使用及常見問題

前言

本文檔是針對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

轉載于:https://www.cnblogs.com/zno2/p/4555056.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271164.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統開發基礎:UML相關知識筆記

1、UML概念統一建模語言&#xff08;Unified Modeling Language UML&#xff09;是面向對象軟件的標準建模語言。由于簡單、統一&#xff0c;又能夠表達軟件設計中的動態和靜態信息。目前UML已經成為可視化建模語言的工業標準。2、UML的組成UML三要素&#xff1a;構造塊、規則、…

java中什么是運行異常_在java中最常用的運行時異常是什么?

我從不會拋出NullPointerException。對我來說&#xff0c;它是一個出現在代碼中當出現問題時&#xff0c;需要開發人員看看會發生什么。然后(s)他固定的原因&#xff0c;它不會再次發生。我使用IllegalStateException表示對象配置不正確或調用的順序不正確。但是&#xff0c;我…

迭代器 java_面試必備(含答案):30 個 Java 高頻面試問題

Java集合框架為Java編程語言的基礎&#xff0c;也是Java面試中很重要的一個知識點。這里&#xff0c;我列出了一些關于Java集合的重要問題和答案。1.Java集合框架是什么&#xff1f;說出一些集合框架的優點&#xff1f;每種編程語言中都有集合&#xff0c;最初的Java版本包含幾…

硬件基礎:臺式電腦上的常用的幾個接口!

今天給大家詳細講解臺式電腦上的常用的幾個接口&#xff01;1、I/O接口部分下圖所有的接口&#xff0c;也是我們機箱后面的接口&#xff0c;統稱為&#xff1a;I/O接口。2、鍵鼠PS/2PS/2接口是I/O接口中比較常見的一種接口&#xff0c;用來連接鍵盤和鼠標&#xff0c;二者可以用…

CSS-DOM介紹

三位一體的網頁: 我們在瀏覽器里看到的網頁其實是由以下三層信息構成的一個共同體: 1、結構層: 結構層是由HTML和XHTML之類的標記語言所構成的。所就是哪些出現在html標簽里面的單詞,對網頁內容的語義含義作出了如下描述&#xff0c;例如&#xff0c;<p>This is a paragr…

java 開發注意項_JAVA開發注意事項集錦

本篇博客用于持續記錄開發過程中的常用的需要注意的事項&#xff0c;都是嚴重的生產問題大家總結出來的、記得持續更新喔。一&#xff0c;不要以時間戳作為唯一健時間戳精確到ms級別&#xff0c;并不能作為唯一入口參數&#xff0c;數據庫更新唯一查詢參數&#xff0c;唯一健需…

系統開發基礎:UML中圖的相關知識筆記(上)

1、圖的概念圖(Diagram) 是一組元素的圖形表示&#xff0c;大多數情況下&#xff0c;把圖畫成頂點&#xff08;代表事物&#xff09;和弧(表示關系)的連通圖。2、UML中圖的分類UML2.0中的圖主要有&#xff1a;類圖、對象圖、用例圖、序列圖、通信圖、狀態圖、活動圖、構件圖、部…

python循環頂帖_設計Python數據庫連接池1-對象的循環引用問題

在Python中如果對象定義了__del__方法的話&#xff0c;在對象的引用記數為0時會自動調用__del__方法(很象c中的析構函數)&#xff0c;但如果A對象引用B對象&#xff0c;B對象又引用A對象&#xff0c;就形成循環引用&#xff0c;此時A&#xff0c;B對象引用次數都為1。python就無…

編譯時類型 和運行時類型的 區別(1)

class T{ void f(int x){ System.out.println("int in T:" x); } void f(double x){ System.out.println("double in T:"x); } void f(Object x){ System.out.println("Object in T:" x); }} class S extends T{ void f(int x){  //子類覆蓋基…

系統開發基礎:UML中圖的相關知識筆記(下)

1、狀態圖狀態圖展現了一個狀態機&#xff0c;它由狀態、轉換、事件、活動組成。狀態圖關注系統的動態視圖&#xff0c;它對于接口、類、協作的行為建模尤為重要&#xff0c;它強調對象行為的事件順序。組成&#xff1a;簡單狀態、組合狀態、轉換&#xff08;事件和動作&#x…

java京東左側固定層_京東首頁右側固定層

需求說明制作京東首頁右側的固定層&#xff0c;6個圖標&#xff1a;京東會員、購物車、我的關注、我的足跡、我的消息和咨詢JIMI默認狀態下僅顯示圖標&#xff0c;背景顏色為深灰色&#xff1b;當鼠標移至圖標上時&#xff0c;背景顏色為深紅色&#xff0c;并且顯示文本css*{ma…

云開發技術應用python_云開發技術應用(Python)

本書共14章&#xff0c;從Python語言的語法特性開始&#xff0c;介紹了Python的安裝和配置、數據類型及表達式、流程控制、序列和字典、文件處理、函數等&#xff0c;由淺入深&#xff0c;循序漸進&#xff0c;逐步引入高級話題&#xff0c;包括面向對象編程、模塊和包、異常處…

記錄下Linux難記實用的命令

1 看文件大小&#xff1a;du -sm * | sort -n 2 合并多個文件&#xff0c;可以跨文件夾合并&#xff1a;cat *_.txt >> news.txt 3 給文件改編碼&#xff1a;iconv -f GBK -t UTF-8 原文件名 -o 新文件名 4 查找文件內容&#xff1a;grep "thermcontact" */*.i…

系統設計基礎:系統設計基本任務相關知識

1、系統設計的目的提前為系統指定藍圖&#xff0c;在各種技術和實施方法中進行權衡&#xff0c;精心設計&#xff0c;合理利用各種資源、最終確定新系統的詳細設計方案。2、系統設計的內容系統設計的內容主要包括系統總體結構設計、代碼設計、輸出設計、輸入設計、處理過程設計…

java7 3dm下載_3DM游戲運行庫合集安裝包v2.8

游戲運行庫大全 游戲運行環境 所有游戲組件 32位 64位系統常用運行庫合集 3DM游戲常用運行庫安裝包 下載 幸姨作品本安裝包集成32位和64位運行庫&#xff0c;是目前互聯網上最新最全的常用運行庫合集&#xff0c;能自動識別系統版本以提供適合您的組件&#xff0c;無人值守自動…

uci數據集_干貨收藏!三大領域常用十大開源數據集

全文共1144字&#xff0c;預計學習時長2分鐘機器學習的研究與實現離不開大數據。知曉通用的開源數據集&#xff0c;一方面可以驗證自己算法&#xff0c;另一方面也可以與其他算法進行比較。本文介紹了計算機視覺、自然語言處理和語音識別三大領域的十個開源數據集以供你參考&am…

系統設計知識:系統設計的基本原理介紹

1、抽象抽象主要用來將復雜的現象簡化到可以分析、實驗或者可以理解的程度。抽象的最低層就是實現該軟件的源程序代碼。在進行模塊化設計也可以有多個抽象層次&#xff0c;最高抽象層次的模塊用概括的方式描述問題的解決方案。較低層次的模塊是對更高抽象層次模塊對問題描述的細…