Storm - 分散式訊息系統



Apache Storm 處理即時資料,輸入通常來自訊息佇列系統。外部分散式訊息系統將提供即時計算所需的輸入。Spout 將從訊息系統讀取資料,將其轉換為元組,並輸入到 Apache Storm 中。有趣的是,Apache Storm 在內部使用其自己的分散式訊息系統進行 Nimbus 和 Supervisor 之間的通訊。

什麼是分散式訊息系統?

分散式訊息基於可靠訊息佇列的概念。訊息在客戶端應用程式和訊息系統之間非同步排隊。分散式訊息系統提供了可靠性、可擴充套件性和永續性的優勢。

大多數訊息模式遵循**釋出-訂閱**模型(簡稱為**Pub-Sub**),其中訊息傳送者稱為**釋出者**,想要接收訊息的稱為**訂閱者**。

訊息一旦被髮送者釋出,訂閱者就可以藉助過濾選項接收選定的訊息。通常我們有兩種型別的過濾,一種是**基於主題的過濾**,另一種是**基於內容的過濾**。

請注意,釋出-訂閱模型只能透過訊息進行通訊。它是一個非常鬆散耦合的架構;甚至傳送者都不知道他們的訂閱者是誰。許多訊息模式都透過訊息代理來交換髮布的訊息,以便許多訂閱者及時訪問。一個現實世界的例子是 Dish TV,它釋出不同的頻道,如體育、電影、音樂等,任何人都可以訂閱他們自己的一組頻道,並在其訂閱的頻道可用時獲得它們。

Messaging System

下表描述了一些流行的高吞吐量訊息系統:

分散式訊息系統 描述
Apache Kafka Kafka 是在 LinkedIn 公司開發的,後來成為 Apache 的一個子專案。Apache Kafka 基於代理啟用、持久化、分散式釋出-訂閱模型。Kafka 快速、可擴充套件且高效。
RabbitMQ RabbitMQ 是一個開源的分散式健壯訊息應用程式。它易於使用,可在所有平臺上執行。
JMS(Java 訊息服務) JMS 是一個開源 API,支援在應用程式之間建立、讀取和傳送訊息。它提供保證的訊息傳遞,並遵循釋出-訂閱模型。
ActiveMQ ActiveMQ 訊息系統是 JMS 的一個開源 API。
ZeroMQ ZeroMQ 是無代理的點對點訊息處理。它提供推拉、路由器-處理程式訊息模式。
Kestrel Kestrel 是一個快速、可靠且簡單的分散式訊息佇列。

Thrift 協議

Thrift 是在 Facebook 為跨語言服務開發和遠端過程呼叫 (RPC) 而構建的。後來,它成為一個開源的 Apache 專案。Apache Thrift 是一種**介面定義語言**,允許輕鬆地在定義的資料型別之上定義新的資料型別和服務實現。

Apache Thrift 也是一個通訊框架,支援嵌入式系統、移動應用程式、Web 應用程式和許多其他程式語言。與 Apache Thrift 相關的關鍵特性包括其模組化、靈活性和高效能。此外,它可以在分散式應用程式中執行流式傳輸、訊息傳遞和 RPC。

Storm 廣泛使用 Thrift 協議進行內部通訊和資料定義。Storm topology 只是**Thrift 結構**。在 Apache Storm 中執行 topology 的 Storm Nimbus 是一個**Thrift 服務**。

廣告
© . All rights reserved.