Apache storm是一个分布式的实时大数据处理系统。用于在容错和水平可拓展方法中处理大量数据。
它是一个流数据框架,具有很高的摄取率,无状态。通过zk管理分布式环境和集群状态,并行地对实时数
据执行各种操作。
storm易于设置和操作,并且它保证每个消息将通过拓扑至少处理一次。
基本上Hadoop和Storm框架用于分析大数据。两者互补,在某些方面有所不同。Apache Storm执行除持
久性之外的所有操作,而Hadoop在所有方面都很好,但滞后于实时计算。下表比较了Storm和Hadoop的
属性。
Storm
实时流处理
无状态
Hadoop
批量处理
有状态
主/从架构与基于ZooKeeper的协调。主节点称为nimbus,从属
节点是主管。
Storm流过程在集群上每秒可以访问数万条消息。
Storm拓扑运行直到用户关闭或意外的不可恢复故障。
具有/不具有基于ZooKeeper的协调的主 从结构。主节点是
业跟踪器,从节点是任务跟踪器。
Hadoop分布式文件系统(HDFS)使用MapReduce框架来处理大
量的数据,需要几分钟或几小时。
MapReduce作业按顺序执行并最终完成。
如果nimbus / supervisor死机,重新启动使它从它停止的地
方继续,因此没有什么受到影响。
如果JobTracker死机,所有正在运行的作业都会丢失。
两者都是分布式和容错的
Apache Storm优势:
1. Storm是开源的,强大的,用户友好的。它可以用于小公司和大公司。
2. Storm是容错的,灵活的,可靠的,并且支持任何编程语言。
3. 允许实时流处理。
4. Storm是令人难以置信的快,因为它具有巨大的处理数据的力量。
5. Storm可以通过线性增加资源来保持性能,即使在负载增加的情况下。它是高度可扩展的。
6. Storm在几秒钟或几分钟内执行数据刷新和端到端传送响应取决于问题。它具有非常低的延
迟。
7. Storm有操作智能。
8. Storm提供保证的数据处理,即使群集中的任何连接的节点死或消息丢失。
Apache storm从一端读取 实时数据的原始流,将其传递通过一系列小处理单元,并在另一端输出处
理/有用的信息
Apache Storm的主要组件
组件
Tuple
Tuple是Storm中的主要数据结构。它是有序元素的列表。默认情况下,Tuple支持所有数
据类型。通常,它被建模为一组逗号分隔的值,并传递到Storm集群。
描述
Stream 流是元组的无序序列。
Spouts
Bolts
流的源。通常,Storm从原始数据源(如Twitter Streaming API,Apache Kafka队
列,Kestrel队列等)接受输入数据。否则,您可以编写spouts以从数据源读取数
据。“ISpout”是实现spouts的核心接口,一些特定的接口是IRichSpout,
BaseRichSpout,KafkaSpout等。
Bolts是逻辑处理单元。Spouts将数据传递到Bolts和Bolts过程,并产生新的输出流。
Bolts可以执行过滤,聚合,加入,与数据源和数据库交互的操作。Bolts接收数据并发射
到一个或多个Bolts。 “IBolt”是实现Bolts的核心接口。一些常见的接口是
IRichBolt,IBasicBolt等。
拓扑
Spouts和Bolts连接在一起,形成拓扑结构。实时应用程序逻辑在Storm拓扑中指定。简单地说,拓扑是
有向图,其中顶点是计算,边缘是数据流。
简单拓扑从spouts开始。Spouts将数据发射到一个或多个Bolts。Bolt表示拓扑中具有最小处理逻辑的
节点,并且Bolts的输出可以发射到另一个Bolts作为输入。
Storm保持拓扑始终运行,直到您终止拓扑。Apache Storm的主要工作是运行拓扑,并在给定时间运行
任意数量的拓扑。
任务
现在你有一个关于Spouts和Bolts的基本想法。它们是拓扑的最小逻辑单元,并且使用单个Spout和Bolt
阵列构建拓扑。应以特定顺序正确执行它们,以使拓扑成功运行。Storm执行的每个Spout和Bolt称为“任
务”。简单来说,任务是Spouts或Bolts的执行。在给定时间,每个Spout和Bolt可以具有在多个单独的
螺纹中运行的多个实例。
进程
拓扑在多个工作节点上以分布式方式运行。Storm将所有工作节点上的任务均匀分布。工作节点的角色是
监听作业,并在新作业到达时启动或停止进程。
流分组
数据流从Spouts流到Bolts,或从一个Bolts流到另一个Bolts。流分组控制元组在拓扑中的路由方式,
并帮助我们了解拓扑中的元组流。
随机分组
在随机分组中,相等数量的元组随机分布在执行Bolts的所有工人中。下图描述了结构。
字段分组
元组中具有相同值的字段组合在一起,其余的元组保存在外部。然后,具有相同字段值的元组被向前
发送到执行Bolts的同一进程。例如,如果流由字段“字”分组,则具有相同字符串“Hello”的元组将
移动到相同的工作者。下图显示了字段分组的工作原理。
全局分组
所有流可以分组并向前到一个Bolts。此分组将源的所有实例生成的元组发送到单个目标实例(具体
来说,选择具有最低ID的工作程序)。
所有分组
所有分组将每个元组的单个副本发送到接收Bolts的所有实例。这种分组用于向Bolts发送信号。所
有分组对于连接操作都很有用。
Apache Storm集群架构
Apache Storm的主要亮点是,它是一个容错,快速,没有“单点故障”(SPOF)分布式应用程序。我们可
以根据需要在多个系统中安装Apache Storm,以增加应用程序的容量。
Apache Storm有两种类型的节点,Nimbus(主节点)和Supervisor(工作节点)。Nimbus是
Apache Storm的核心组件。Nimbus的主要工作是运行Storm拓扑。Nimbus分析拓扑并收集要执行的任
务。然后,它将任务分配给可用的supervisor。
Supervisor将有一个或多个工作进程。Supervisor将任务委派给工作进程。工作进程将根据需要产生尽
可能多的执行器并运行任务。Apache Storm使用内部分布式消息传递系统来进行Nimbus和管理程序之间
的通信。
组件
Nimbus(主节点)
Supervisor(工作节点)
描述
Nimbus是Storm集群的主节点。集群中的所有其他节点称为工作节点。主节点负
责在所有工作节点之间分发数据,向工作节点分配任务和监视故障。
遵循指令的节点被称为Supervisors。Supervisor有多个工作进程,它管理工
作进程以完成由nimbus分配的任务。
Worker process(工作进程) 工作进程将执行与特定拓扑相关的任务。工作进程不会自己运行任务,而是创建
执行器并要求他们执行特定的任务。工作进程将有多个执行器。
Executor(执行者)
执行器只是工作进程产生的单个线程。执行器运行一个或多个任务,但仅用于特
定的spout或bolt。
Task(任务)
任务执行实际的数据处理。所以,它是一个spout或bolt。
ZooKeeper
Apache的ZooKeeper的是使用群集(节点组)自己和维护具有强大的同步技术
共享数据之间进行协调的服务。Nimbus是无状态的,所以它依赖于ZooKeeper
来监视工作节点的状态。
ZooKeeper的帮助supervisor与nimbus交互。它负责维持nimbus,
supervisor的状态。
Storm是无状态的。即使无状态性质有它自己的缺点,它实际上帮助Storm以最好的可能和最快的方
式处理实时数据。
Storm虽然不是完全无状态的。它将其状态存储在Apache ZooKeeper中。由于状态在Apache
ZooKeeper中可用,故障的网络可以重新启动,并从它离开的地方工作。通常,像monit这样的服务监视
工具将监视Nimbus,并在出现任何故障时重新启动它。
Apache Storm还有一个称为Trident拓扑的高级拓扑,它具有状态维护,并且还提供了一个高级API,如
Pig。