Storm - 分布式消息系统


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

什么是分布式消息系统?

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

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

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

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

消息系统

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

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

节俭协议

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

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

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