【转】RocketMQ的一些特性(生产者消费者配置参数的含义)
| 一 nameserver 相對來說,nameserver的穩定性非常高。原因有二: 1 nameserver互相獨立,彼此沒有通信關系,單臺nameserver掛掉,不影響其他nameserver,即使全部掛掉,也不影響業務系統使用,這點類似于dubbo的zookeeper。 2 nameserver不會有頻繁的讀寫,所以性能開銷非常小,穩定性很高。 二 broker 1 與nameserver關系
? ? ?單個broker和所有nameserver保持長連接
? ? ?心跳間隔:每隔30秒(此時間無法更改)向所有nameserver發送心跳,心跳包含了自身的topic配置信息。 ? ? ?心跳超時:nameserver每隔10秒鐘(此時間無法更改),掃描所有還存活的broker連接,若某個連接2分鐘內(當前時間與最后更新時間差值超過2分鐘,此時間無法更改)沒有發送心跳數據,則斷開連接。
? ? ?動作:一旦連接斷開,nameserver會立即感知,更新topic與隊列的對應關系,但不會通知生產者和消費者 ? 2 負載均衡
? 3 可用性 ? ?由于消息分布在各個broker上,一旦某個broker宕機,則該broker上的消息讀寫都會受到影響。所以rocketmq提供了master/slave的結構,salve定時從master同步數據,如果master宕機,則slave提供消費服務,但是不能寫入消息,此過程對應用透明,由rocketmq內部解決。 這里有兩個關鍵點:
? 4 可靠性
5 消息清理
? ? ?默認10秒,由broker配置參數cleanResourceInterval決定
? ? ?物理文件不能無限制的一直存儲在磁盤,當磁盤空間達到閾值時,不再接受消息,broker打印出日志,消息發送失敗,閾值為固定值85%
? ? ?默認每天凌晨4點,由broker配置參數deleteWhen決定;或者磁盤空間達到閾值
? ? ?默認72小時,由broker配置參數fileReservedTime決定 ? ? 6 讀寫性能
7 系統特性
? 三 消費者 1 與nameserver關系
? ? ?單個消費者和一臺nameserver保持長連接,定時查詢topic配置信息,如果該nameserver掛掉,消費者會自動連接下一個nameserver,直到有可用連接為止,并能自動重連。
與nameserver沒有心跳
默認情況下,消費者每隔30秒從nameserver獲取所有topic的最新隊列情況,這意味著某個broker如果宕機,客戶端最多要30秒才能感知。該時間由DefaultMQPushConsumer的pollNameServerInteval參數決定,可手動配置。 ? 2 與broker關系
單個消費者和該消費者關聯的所有broker保持長連接。
默認情況下,消費者每隔30秒向所有broker發送心跳,該時間由DefaultMQPushConsumer的heartbeatBrokerInterval參數決定,可手動配置。broker每隔10秒鐘(此時間無法更改),掃描所有還存活的連接,若某個連接2分鐘內(當前時間與最后更新時間差值超過2分鐘,此時間無法更改)沒有發送心跳數據,則關閉連接,并向該消費者分組的所有消費者發出通知,分組內消費者重新分配隊列繼續消費
時機:消費者掛掉;心跳超時導致broker主動關閉連接 動作:一旦連接斷開,broker會立即感知到,并向該消費者分組的所有消費者發出通知,分組內消費者重新分配隊列繼續消費 ? 3 負載均衡 集群消費模式下,一個消費者集群多臺機器共同消費一個topic的多個隊列,一個隊列只會被一個消費者消費。如果某個消費者掛掉,分組內其它消費者會接替掛掉的消費者繼續消費。 4 消費機制
? ? ? ? 消費者不間斷的從broker拉取消息,消息拉取到本地隊列,然后本地消費線程消費本地消息隊列,只是一個異步過程,拉取線程不會等待本地消費線程,這種模式實時性非常高。對消費者對本地隊列有一個保護,因此本地消息隊列不能無限大,否則可能會占用大量內存,本地隊列大小由DefaultMQPushConsumer的pullThresholdForQueue屬性控制,默認1000,可手動設置。
? ? ?監聽器每次接受本地隊列的消息是多少條?這個參數由DefaultMQPushConsumer的consumeMessageBatchMaxSize屬性控制,默認為1,可手動設置。 ? 5 消費進度存儲 ? ? ?每隔一段時間將各個隊列的消費進度存儲到對應的broker上,該時間由DefaultMQPushConsumer的persistConsumerOffsetInterval屬性控制,默認為5秒,可手動設置。 ? 6 如果一個topic在某broker上有3個隊列,一個消費者消費這3個隊列,那么該消費者和這個broker有幾個連接? ? ? ?一個連接,消費單位與隊列相關,消費連接只跟broker相關,事實上,消費者將所有隊列的消息拉取任務放到本地的隊列,挨個拉取,拉取完畢后,又將拉取任務放到隊尾,然后執行下一個拉取任務 ? ? 四 生產者 1 與nameserver關系
? ? ?單個生產者者和一臺nameserver保持長連接,定時查詢topic配置信息,如果該nameserver掛掉,生產者會自動連接下一個nameserver,直到有可用連接為止,并能自動重連。
默認情況下,生產者每隔30秒從nameserver獲取所有topic的最新隊列情況,這意味著某個broker如果宕機,生產者最多要30秒才能感知,在此期間,發往該broker的消息發送失敗。該時間由DefaultMQProducer的pollNameServerInteval參數決定,可手動配置。
與nameserver沒有心跳 ? 2 與broker關系
單個生產者和該生產者關聯的所有broker保持長連接。
默認情況下,生產者每隔30秒向所有broker發送心跳,該時間由DefaultMQProducer的heartbeatBrokerInterval參數決定,可手動配置。broker每隔10秒鐘(此時間無法更改),掃描所有還存活的連接,若某個連接2分鐘內(當前時間與最后更新時間差值超過2分鐘,此時間無法更改)沒有發送心跳數據,則關閉連接。
移除broker上的生產者信息 ? 3 負載均衡? ? ?生產者時間沒有關系,每個生產者向隊列輪流發送消息 |
總結
以上是生活随笔為你收集整理的【转】RocketMQ的一些特性(生产者消费者配置参数的含义)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AMD锐龙处理器装Win11:终于完美了
- 下一篇: 国际油价接近“天花板”!今晚95号油或破