rocketmq常見問題
rocketmq常見問題
以下是關於RocketMQ項目的常見問題
使用
-
「新創建的Consumer ID從哪裡開始消費消息?」
1)如果發送的消息在三天之內,那麼消費者會從伺服器中保存的第一條消息開始消費。
2)如果發送的消息已經超過三天,則消費者會從伺服器中的最新消息開始消費,也就是從隊列的尾部開始消費。
3)如果消費者重新啟動,那麼它會從最後一個消費位置開始消費消息。
-
「當消費失敗的時候如何重新消費消息?」
1)在集群模式下,消費的業務邏輯程式碼會返回Action.ReconsumerLater,NULL,或者拋出異常,如果一條消息消費失敗,最多會重試16次,之後該消息會被丟棄。
2)在廣播消費模式下,廣播消費仍然保證消息至少被消費一次,但不提供重發的選項。
-
「當消費失敗的時候如何找到失敗的消息?」
1)使用按時間的主題查詢,可以查詢到一段時間內的消息。
2)使用主題和消息ID來準確查詢消息。
3)使用主題和消息的Key來準確查詢所有消息Key相同的消息。
-
「消息只會被傳遞一次嗎?」
RocketMQ 確保所有消息至少傳遞一次。 在大多數情況下,消息不會重複。
-
「如何增加一個新的Broker?」
1)啟動一個新的Broker並將其註冊到name server中的Broker列表裡。
2)默認只自動創建內部系統topic和consumer group。 如果您希望在新節點上擁有您的業務主題和消費者組,請從現有的Broker中複製它們。 我們提供了管理工具和命令行來處理此問題。
配置相關
以下回答均為默認值,可通過配置修改。
-
「消息在伺服器上可以保存多長時間?」
存儲的消息將最多保存 3 天,超過 3 天未使用的消息將被刪除。
-
「消息體的大小限制是多少?」
通常是256KB
-
「怎麼設置消費者執行緒數?」
當你啟動消費者的時候,可以設置 ConsumeThreadNums屬性的值,舉例如下:
consumer.setConsumeThreadMin(20);
consumer.setConsumeThreadMax(20);
錯誤
-
「當你啟動一個生產者或消費者的過程失敗了並且錯誤資訊是生產者組或消費者重複」
原因:使用同一個Producer/Consumer Group在同一個JVM中啟動多個Producer/Consumer實例可能會導致客戶端無法啟動。
解決方案:確保一個 Producer/Consumer Group 對應的 JVM 只啟動一個 Producer/Consumer 實例。
-
「消費者無法在廣播模式下開始載入 json 文件」
原因:fastjson 版本太低,無法讓廣播消費者載入本地 offsets.json,導致消費者啟動失敗。 損壞的 fastjson 文件也會導致同樣的問題。
解決方案:Fastjson 版本必須升級到 RocketMQ 客戶端依賴版本,以確保可以載入本地 offsets.json。 默認情況下,offsets.json 文件在 /home/{user}/.rocketmq_offsets 中。 或者檢查fastjson的完整性。
-
「Broker崩潰以後有什麼影響?」
1)Master節點崩潰
消息不能再發送到該Broker集群,但是如果您有另一個可用的Broker集群,那麼在主題存在的條件下仍然可以發送消息。消息仍然可以從Slave節點消費。
2)一些Slave節點崩潰
只要有另一個工作的slave,就不會影響發送消息。 對消費消息也不會產生影響,除非消費者組設置為優先從該Slave消費。 默認情況下,消費者組從 master 消費。
3)所有Slave節點崩潰
向master發送消息不會有任何影響,但是,如果master是SYNC_MASTER,producer會得到一個SLAVE_NOT_AVAILABLE,表示消息沒有發送給任何slave。 對消費消息也沒有影響,除非消費者組設置為優先從slave消費。 默認情況下,消費者組從master消費。
-
「Producer提示「No Topic Route Info」,如何診斷?」
當您嘗試將消息發送到一個路由資訊對生產者不可用的主題時,就會發生這種情況。
1)確保生產者可以連接到名稱伺服器並且能夠從中獲取路由元資訊。
2)確保名稱伺服器確實包含主題的路由元資訊。 您可以使用管理工具或 Web 控制台通過 topicRoute 從名稱伺服器查詢路由元資訊。
3)確保您的Broker將心跳發送到您的生產者正在連接的同一name server列表。
4)確保主題的許可權為6(rw-),或至少為2(-w-)。
如果找不到此主題,請通過管理工具命令updateTopic或Web控制台在Broker上創建它。