Storm - 分布式消息系统



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

什么是分布式消息系统?

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

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

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

请注意,发布-订阅模型只能通过消息进行通信。它是一个非常松散耦合的架构;甚至发送者都不知道他们的订阅者是谁。许多消息模式都通过消息代理来交换发布的消息,以便许多订阅者及时访问。一个现实世界的例子是 Dish TV,它发布不同的频道,如体育、电影、音乐等,任何人都可以订阅他们自己的一组频道,并在其订阅的频道可用时获得它们。

Messaging System

下表描述了一些流行的高吞吐量消息系统:

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

Thrift 协议

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

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

Storm 广泛使用 Thrift 协议进行内部通信和数据定义。Storm topology 只是**Thrift 结构**。在 Apache Storm 中运行 topology 的 Storm Nimbus 是一个**Thrift 服务**。

广告