RocketMQ如何支援更多佇列(翻譯)

2021-09-19 22:15:10 字數 1264 閱讀 9529

kafka是乙個分布式流處理平台,它誕生自日誌聚合案例。它不需要太高的併發性。在阿里的大規模案例中,我們發現

原始模式不能滿足我們的事件需求。因此,我們開發了乙個名為rocketmq的訊息中介軟體,來解決更廣泛的使用場景,從傳統的發布/訂閱情景到超大容量的不容忍訊息丟失的事物系統。現在,在阿里,rocketmq集群每天處理超過5000億次事件,為3000多核心應用提供服務。

生產者的並行寫受分割槽數量的限制。

消費者的消費並行級別同樣受到消費分割槽數量的限制。假設最大分割槽數量是20,當前消費中的消費者最大數量也只能是20.

每個主題由固定數量的分割槽組成。分割槽數量決定單個broker可能擁有的最大主題數,而不會顯著的影響效能。

更多詳情請參考這裡

每個分割槽都儲存著所有的訊息資料。儘管每個分割槽都按照順序寫盤,但隨著併發寫入分割槽的數量增加,從作業系統層面來說,寫入就變的隨機。

由於資料檔案的分散,使用linux io組提交機制會比較困難。

所有的訊息資料儲存在提交日誌檔案。所有的寫操作都是完全有序的,而讀操作是隨機的。

消費佇列儲存使用者實際消費位置資訊,這些訊息也可以以順序方式刷到磁碟。

優勢每個訊息佇列都是輕量級的,並且包含有限的元資料。

訪問磁碟是完全按序的,這也會避免磁碟鎖的爭奪,當大量佇列被建立也不會引發高磁碟io等待。

劣勢訊息消費會首先讀取消費佇列,然後是提交日誌。這個過程將會帶來一定的成本,在最壞的情況下。

提交日誌和消費佇列需要保證邏輯一致,這將會給程式設計模型帶來額外的複製性。

動機隨機讀。盡可能多的讀取以提高頁面快取的命中率,減少讀取io操作。因此大容量記憶體依然是更可取的。如果大量訊息堆積,讀效能會不會下降很嚴重?答案是否定的,理由如下:

1,即使訊息的大小只有1kb,系統也會提前讀取更多資料。這意味著後續資料的讀取,這將訪問主儲存器,而不是緩慢的磁碟io讀取。

2,從磁碟隨機訪問提交日誌。在ssd情況下將i/o調動程式設定為noop,讀qps將顯著提速,這樣會比電梯排程演算法更快。

鑑於消費佇列僅儲存固定大小的元資料,主要用來記錄消費進度,因此會很好的支援隨機讀。擁有頁面快取預取的優勢,訪問消費佇列同訪問主記憶體一樣快,即使在大量訊息堆積的情況下。作為結果,消費佇列不會對讀效能帶來明顯的損失。

提交日誌儲存幾乎所有的資訊,包括訊息資料。類似關聯式資料庫的重做日誌,只要提交日誌存在,消費佇列,訊息健索引和所有其他所需資料都能被完全恢復。

RocketMQ是如何支援佇列

kafka是乙個分布式流平台,它源自於日誌聚合案例,它不需要太高的併發性.在阿里巴巴的一些大型案例中,發現原來的模式已經不能滿足的實際需求。因此,開發了乙個名為rocketmq的訊息中介軟體,它可以處理廣泛的場景,從傳統的發布 訂閱場景到要求高容量 不允許訊息丟失的實時事務系統等。如何選擇kafka...

如何保證rocketmq消費順序

問題 我們知道訊息佇列可以在高併發的情況下,實現 削峰填谷,以及可以 非同步解偶。但是 某些業務場景下,我們需要 保證訊息是嚴格按照一定順序 去消費的,這時候我們要怎麼辦?以rocketmq為例。我們 知道 訊息從 producer 傳送到 broker 佇列中 一般是 輪訓傳送到 多個broker...

程式設計師如何認識更多異性 如何認識更多優質單身異性?

他們覺得自己社交面太窄,每天工作住所兩點一線,不知要去 認識優質的單身異性?其實不難!沒錯!不要覺得老土!據統計 一半以上的婚戀,都是由他人介紹成功的。所以,要想盡快脫單,你不能忽略這個成功率排第一的重要途徑!他人可以是親朋好友 同學同事,甚至不太熟卻對你有好感 願意幫你的人。你可能面薄,覺得請人介...