Apache Storm 简明教程

Storm - Distributed Messaging System

Apache Storm 处理实时数据,而输入通常来自消息排队系统。外部分布式消息系统将为实时计算提供必要的输入。流经器将从消息系统读取数据,并将它转换为元组,并输入至 Apache Storm。有趣的是,Apache Storm 在其内部使用自己的分布式消息系统,来进行其 Nimbus 和 Supervisor 之间的通信。

What is Distributed Messaging System?

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

大多数消息模式都遵循 publish-subscribe 模型(即 Pub-Sub ),其中消息的发送者被称为 publishers ,而希望接收消息者被称为 subscribers

在发送者发布消息后,订阅者借助筛选选项可以接收选定的消息。通常情况下,我们有两种类型的筛选,一种是 topic-based filtering ,另一种是 content-based filtering

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

messaging system

下表介绍了一些常见的超高吞吐消息系统 −

Distributed messaging system

Description

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 Protocol

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

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

Storm 广泛使用 Thrift 协议进行其内部通信和数据定义。Storm 拓扑只是 Thrift Structs 。Apache Storm 中运行拓扑的 Storm Nimbus 是一个 Thrift service