RabbitMQ推出類似Kafka的流Stream

banq發表於2021-07-14

RabbitMQ 3.9 引入了一種新型資料結構:流。Streams 解鎖了一組用例,使用“傳統”佇列實現這些用例可能很乏味。讓我們在這篇文章中發現流如何擴充套件 RabbitMQ 的功能。
RabbitMQ 流使用非破壞性消費語義對僅附加日誌進行建模。這意味著——與 RabbitMQ 中的傳統佇列相反——從流中消費不會刪除訊息。
RabbitMQ 中的流是持久化和複製的。這轉化為資料安全性和可用性(在節點丟失的情況下),以及擴充套件(從不同節點讀取相同的流)。
與非常通用的佇列相比,流看起來有點固執己見,但它們在一組用例中派上用場。它們以一種非常好的方式擴充套件了 RabbitMQ 的功能。
RabbitMQ Streams 在以下用例中大放異彩:
  • 大扇出:許多應用程式需要讀取相同的訊息(對於傳統佇列,這將需要為每個應用程式宣告一個佇列並將相同訊息的副本傳遞給每個應用程式)
  • 大積壓:流將訊息儲存在磁碟上,而不是記憶體中,因此唯一的限制是磁碟容量
  • 重放和時間旅行:消費者可以使用絕對偏移量或時間戳附加流中的任何位置,並且他們可以讀取和重新讀取相同的資料
  • 高吞吐量:與傳統佇列相比,流速度超快,快幾個數量級

由於流作為RabbitMQ 3.9 中的核心外掛釋出,您可以將它們與所有現有的 RabbitMQ 功能一起使用。
更具體地瞭解流:
  • 由於釋出者確認和釋出者端的訊息重複資料刪除,流提供至少一次保證。
  • 流支援伺服器端偏移跟蹤,讓消費者從他們離開的地方重新開始。
  • 由於流具有非破壞性語義,因此它們可以增長很多。RabbitMQ Streams 可以根據保留策略,基於大小或年齡自動截斷流。
  • 流可以透過專用的、極快的二進位制協議和 AMQP 0.9.1 & 1.0(快速)訪問。
  • 由於RabbitMQ 3.9 的核心發行版中附帶的流外掛,流協議是可訪問的。
  • RabbitMQ Streams 支援客戶端-伺服器 TLS。
  • 可以使用現代的、高度最佳化的Java 客戶端。它使用流協議以獲得更好的效能。它是完整的文件
  • 一個Go客戶端是可用的。
  • 還有一個基於Java客戶端的效能工具。是的,它以Docker 映象的形式出現

相關文章