📅  最后修改于: 2020-12-02 05:55:33             🧑  作者: Mango
Apache Storm处理实时数据,输入通常来自消息队列系统。外部分布式消息传递系统将提供实时计算所需的输入。 Spout将从消息传递系统中读取数据,并将其转换为元组,然后输入到Apache Storm中。有趣的事实是,Apache Storm在内部使用其自己的分布式消息传递系统进行其灵气与主管之间的通信。
分布式消息传递基于可靠消息队列的概念。消息在客户端应用程序和消息传递系统之间异步排队。分布式消息传递系统具有可靠性,可伸缩性和持久性的优点。
大多数消息传递模式遵循发布-订阅模型(简称为Pub-Sub ),在该模型中,消息的发送者称为发布者,而想要接收消息的那些称为订阅者。
一旦发件人发布了邮件,订户就可以在过滤选项的帮助下接收选定的邮件。通常,我们有两种类型的过滤,一种是基于主题的过滤,另一种是基于内容的过滤。
请注意,pub-sub模型只能通过消息进行通信。这是一个非常松散耦合的体系结构。即使发件人也不知道他们的订户是谁。许多消息模式使消息代理可以交换发布消息以供许多订户及时访问。一个真实的例子是Dish TV,它发布了体育,电影,音乐等不同的频道,任何人都可以订阅自己的频道集,并在订阅频道可用时获取它们。
下表描述了一些流行的高吞吐量消息传递系统-
Distributed messaging system | Description |
---|---|
Apache Kafka | Kafka was developed at LinkedIn corporation and later it became a sub-project of Apache. Apache Kafka is based on brokerenabled, persistent, distributed publish-subscribe model. Kafka is fast, scalable, and highly efficient. |
RabbitMQ | RabbitMQ is an open source distributed robust messaging application. It is easy to use and runs on all platforms. |
JMS(Java Message Service) | JMS is an open source API that supports creating, reading, and sending messages from one application to another. It provides guaranteed message delivery and follows publish-subscribe model. |
ActiveMQ | ActiveMQ messaging system is an open source API of JMS. |
ZeroMQ | ZeroMQ is broker-less peer-peer message processing. It provides push-pull, router-dealer message patterns. |
Kestrel | Kestrel is a fast, reliable, and simple distributed message queue. |
Thrift是在Facebook上构建的,用于跨语言服务开发和远程过程调用(RPC)。后来,它成为一个开源的Apache项目。 Apache Thrift是一种界面定义语言,可以轻松地在定义的数据类型之上定义新的数据类型和服务实现。
Apache Thrift还是一个通信框架,它支持嵌入式系统,移动应用程序,Web应用程序和许多其他编程语言。与Apache Thrift相关的一些关键功能是其模块化,灵活性和高性能。此外,它可以在分布式应用程序中执行流式传输,消息传递和RPC。
Storm广泛使用Thrift协议进行内部通信和数据定义。风暴拓扑只是节流结构。在Apache Storm中运行拓扑的Storm Nimbus是Thrift服务。