Storm 分布式消息系统

Apache Storm 处理实时数据,并且输入通常来自消息排队系统。外部分布式消息系统将提供实时计算所需的输入。

Spout 将从消息系统读取数据,并将其转换为元组并输入到 Apache Storm 中。

Apache Storm 在内部使用其自己的分布式消息传递系统,用于其 nimbus 和 supervisors 之间的通信。

 

1.  什么是分布式消息系统

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

大多数消息模式遵循发布 - 订阅模型(简称发布 - 订阅),其中消息的发送者称为发布者,而想要接收消息的那些被称为订阅者

一旦消息已经被发送者发布,订阅者可以在过滤选项的帮助下接收所选择的消息。通常我们有两种类型的过滤,一种是基于主题的过滤,另一种是基于内容的过滤

需要注意的是,pub-sub 模型只能通过消息进行通信。它是一个非常松散耦合的架构;甚至发件人不知道他们的订阅者是谁。许多消息模式使消息代理能够交换发布消息以便由许多订户及时访问。一个现实生活的例子是 Dish 电视,它发布不同的渠道,如运动,电影,音乐等,任何人都可以订阅自己的频道集,并获得他们订阅的频道时可用。

消息系统

 

2.  常见高吞吐量消息传送系统

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

 

3. Thrift 协议

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

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

Storm 广泛使用 Thrift 协议进行内部通信和数据定义。Storm 拓扑只是 Thrift Structs

在 Apache Storm 中运行拓扑的 Storm Nimbus 是一个 Thrift服务