Apache Storm處理實(shí)時(shí)數(shù)據(jù),并且輸入通常來自消息排隊(duì)系統(tǒng)。外部分布式消息系統(tǒng)將提供實(shí)時(shí)計(jì)算所需的輸入。Spout將從消息系統(tǒng)讀取數(shù)據(jù),并將其轉(zhuǎn)換為元組并輸入到Apache Storm中。有趣的是,Apache Storm在內(nèi)部使用其自己的分布式消息傳遞系統(tǒng),用于其nimbus和主管之間的通信。
分布式消息傳遞基于可靠消息隊(duì)列的概念。消息在客戶端應(yīng)用程序和消息系統(tǒng)之間異步排隊(duì)。分布式消息傳遞系統(tǒng)提供可靠性,可擴(kuò)展性和持久性的好處。
大多數(shù)消息模式遵循發(fā)布 - 訂閱模型(簡稱發(fā)布 - 訂閱),其中消息的發(fā)送者稱為發(fā)布者,而想要接收消息的那些被稱為訂閱者。
一旦消息已經(jīng)被發(fā)??送者發(fā)布,訂閱者可以在過濾選項(xiàng)的幫助下接收所選擇的消息。通常我們有兩種類型的過濾,一種是基于主題的過濾,另一種是基于內(nèi)容的過濾。
需要注意的是,pub-sub模型只能通過消息進(jìn)行通信。它是一個(gè)非常松散耦合的架構(gòu);甚至發(fā)件人不知道他們的訂閱者是誰。許多消息模式使消息代理能夠交換發(fā)布消息以便由許多訂戶及時(shí)訪問。一個(gè)現(xiàn)實(shí)生活的例子是Dish電視,它發(fā)布不同的渠道,如運(yùn)動(dòng),電影,音樂等,任何人都可以訂閱自己的頻道集,并獲得他們訂閱的頻道時(shí)可用。
下表描述了一些流行的高吞吐量消息傳遞系統(tǒng) -
分布式消息系統(tǒng) | 描述 |
---|---|
Apache Kafka | Kafka是在LinkedIn公司開發(fā)的,后來它成為Apache的一個(gè)子項(xiàng)目。 Apache Kafka基于brokerenabled的,持久的,分布式的發(fā)布訂閱模型。 Kafka是快速,可擴(kuò)展和高效的。 |
RabbitMQ | RabbitMQ是一個(gè)開源的分布式魯棒消息應(yīng)用程序。它易于使用并在所有平臺(tái)上運(yùn)行。 |
JMS(Java Message Service) | JMS是一個(gè)開源API,支持創(chuàng)建,讀取和從一個(gè)應(yīng)用程序向另一個(gè)應(yīng)用程序發(fā)送消息。它提供有保證的消息傳遞并遵循發(fā)布 - 訂閱模型。 |
ActiveMQ | ActiveMQ消息系統(tǒng)是JMS的開源API。 |
ZeroMQ | ZeroMQ是無代理的對(duì)等體消息處理。它提供推拉,路由器 - 經(jīng)銷商消息模式。 |
Kestrel | Kestrel是一個(gè)快速,可靠,簡單的分布式消息隊(duì)列。 |
Thrift在Facebook上構(gòu)建,用于跨語言服務(wù)開發(fā)和遠(yuǎn)程過程調(diào)用(RPC)。后來,它成為一個(gè)開源的Apache項(xiàng)目。Apache Thrift是一種接口定義語言,允許以容易的方式在定義的數(shù)據(jù)類型之上定義新的數(shù)據(jù)類型和服務(wù)實(shí)現(xiàn)。
Apache Thrift也是一個(gè)支持嵌入式系統(tǒng),移動(dòng)應(yīng)用程序,Web應(yīng)用程序和許多其他編程語言的通信框架。與Apache Thrift相關(guān)的一些關(guān)鍵功能是它的模塊化,靈活性和高性能。此外,它可以在分布式應(yīng)用程序中執(zhí)行流式處理,消息傳遞和RPC。
Storm廣泛使用Thrift協(xié)議進(jìn)行內(nèi)部通信和數(shù)據(jù)定義。Storm拓?fù)渲皇?strong>Thrift Structs。在Apache Storm中運(yùn)行拓?fù)涞腟torm Nimbus是一個(gè)Thrift服務(wù)。
更多建議: