Storm分布式消息系统


Apache Storm处理实时数据,输入通常来自消息排队系统。外部分布式消息系统将提供实时计算所需的输入。Spout将从消息系统读取数据并将其转换为元组并输入到Apache Storm中。有趣的事实是,Apache Storm在其内部使用其自己的分布式消息系统来进行其光纤和主管之间的通信。

什么是分布式消息系统?

分布式消息传递基于可靠消息队列的概念。消息在客户端应用程序和消息传递系统之间异步排队。分布式消息传递系统提供了可靠性,可伸缩性和持久性的好处。

大多数消息传递模式遵循 发布 - 订阅 模型(简称 Pub-Sub ),其中消息的发送者称为 发布 者,而想要接收消息的人称为 订阅者

一旦发送者发布消息,用户就可以借助过滤选项来接收选择的消息。通常我们有两种类型的过滤,一种是 基于主题的过滤 ,另一种是 基于内容的过滤

请注意,pub-sub模型只能通过消息进行通信。它是一个非常松散耦合的架构; 即使发件人也不知道他们的订户是谁。许多消息模式使消息代理能够交换发布消息,以便许多订户及时访问。一个真实的例子是Dish TV,它发布体育,电影,音乐等不同的频道,任何人都可以订阅他们自己的一套频道,并在他们的订阅频道可用时获得。

消息系统

下表介绍了一些流行的高吞吐量消息传送系统

分布式消息系统 描述
Apache Kafka Kafka是在LinkedIn公司开发的,后来它成为Apache的子项目。Apache Kafka基于可破坏,持久,分布式的发布 - 订阅模型。Kafka快速,可扩展且高效。
RabbitMQ RabbitMQ是一个开源的分布式健壮消息传递应用程序。它易于使用并可在所有平台上运行。
JMS(Java Message Service) JMS是一个开源API,支持从一个应用程序创建,读取和发送消息到另一个应用程序。它提供有保证的消息传递并遵循发布 - 订阅模型。
ActiveMQ ActiveMQ消息传递系统是JMS的开源API。
ZeroMQ ZeroMQ是无代理的对等消息处理。它提供推拉式路由器 - 经销商消息模式。
Kestrel Kestrel是一种快速,可靠且简单的分布式消息队列。

节俭协议

Thrift建立在Facebook上,用于跨语言服务开发和远程过程调用(RPC)。后来,它成为了一个开源的Apache项目。Apache Thrift是一种 接口定义语言 ,允许以简单的方式在定义的数据类型之上定义新的数据类型和服务实现。

Apache Thrift也是一个支持嵌入式系统,移动应用程序,Web应用程序和许多其他编程语言的通信框架。与Apache Thrift相关的一些关键特性是其模块化,灵活性和高性能。另外,它可以在分布式应用程序中执行流式传输,消息传递和RPC。

Storm广泛使用Thrift协议来进行内部通信和数据定义。Storm拓扑结构简直就是 节俭结构 。在Apache Storm中运行拓扑的Storm Nimbus是 Thrift服务