Apache Storm分散式訊息系統


Apache Storm處理即時數據,且輸入通常來自訊息排隊系統。外部分散式訊息系統將提供即時計算所需的輸入。 Spout將從訊息系統讀取數據,並將其轉換為元組並輸入到Apache Storm中。有趣的是,Apache Storm在內部使用自己的分散式訊息系統,用於其nimbus和主管之間的通訊。

什麼是分散式訊息系統?

分散式訊息傳遞基於可靠訊息佇列的概念。訊息在客戶端應用程式和訊息系統之間非同步排隊。分散式訊息系統提供可靠性,可擴展性和持久性的好處。

大多數訊息模式遵循發布- 訂閱模型(簡稱發布- 訂閱),其中訊息的發送者稱為發布者,而想要接收訊息的那些稱為訂閱者

一旦訊息已經被發送者發布,訂閱者可以在過濾選項的幫助下接收所選的訊息。通常我們有兩種類型的過濾,一種是基於主題的過濾,另一種是基於內容的過濾

要注意的是,pub-sub模型只能透過訊息進行通訊。它是一個非常鬆散耦合的架構;甚至發件人不知道他們的訂閱者是誰。許多訊息模式使訊息代理能夠交換發布訊息以便由許多訂戶及時存取。一個現實生活的例子是Dish電視,它發布不同的管道,如運動,電影,音樂等,任何人都可以訂閱自己的頻道集,並獲得他們訂閱的頻道時可用。

messaging_system.jpg

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

分散式訊息系統 #描述
Apache KafkaKafka是在LinkedIn公司開發的,後來它成為Apache的子專案。 Apache Kafka是基於brokerenabled的,持久的,分散式的發布訂閱模型。 Kafka是快速,可擴展和高效的。
RabbitMQRabbitMQ是一個開源的分散式穩健訊息應用程式。它易於使用並在所有平台上運行。
JMS(Java Message Service)JMS是一個開源API,支援創建,讀取和從一個應用程式向另一個應用程式發送訊息。它提供有保證的訊息傳遞並遵循發布 - 訂閱模型。
ActiveMQActiveMQ訊息系統是JMS的開源API。
ZeroMQZeroMQ是無代理程式的對等體訊息處理。它提供推拉,路由器 - 經銷商訊息模式。
KestrelKestrel是一個快速,可靠,簡單的分散式訊息佇列。

Thrift協定

Thrift在Facebook上構建,用於跨語言服務開發和遠端過程呼叫(RPC)。後來,它成為一個開源的Apache專案。 Apache Thrift是一種介面定義語言,允許以容易的方式在定義的資料類型之上定義新的資料類型和服務實作。

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

Storm廣泛使用Thrift協定進行內部通訊和資料定義。 Storm拓樸只是Thrift Structs。在Apache Storm中運行拓撲的Storm Nimbus是一個Thrift服務