MAPREDUCE服务 MRS-Storm基本原理:Storm原理
Storm原理
- 基本概念
表1 概念介绍 概念
说明
Tuple
Storm核心数据结构,是消息传递的基本单元,不可变Key-Value对,这些Tuple会以一种分布式的方式进行创建和处理。
Stream
Storm的关键抽象,是一个无边界的连续Tuple序列。
Topology
在Storm平台上运行的一个实时应用程序,由各个组件(Component)组成的一个DAG(Directed Acyclic Graph)。一个Topology可以并发地运行在多台机器上,每台机器上可以运行该DAG中的一部分。Topology与Hadoop中的MapReduce Job类似,不同的是,它是一个长驻程序,一旦开始就不会停止,除非人工中止。
Spout
Topology中产生源数据的组件,是Tuple的来源,通常可以从外部数据源(如消息队列、数据库、文件系统、TCP连接等)读取数据,然后转换为Topology内部的数据结构Tuple,由下一级组件处理。
Bolt
Topology中接受数据并执行具体处理逻辑(如过滤,统计、转换、合并、结果持久化等)的组件。
Worker
是Topology运行态的物理进程。每个Worker是一个JVM进程,每个Topology可以由多个Worker并行执行,每个Worker运行Topology中的一个逻辑子集。
Task
Worker中每一个Spout/Bolt的线程称为一个Task。
Stream groupings
Storm中的Tuple分发策略,即后一级Bolt以什么分发方式来接收数据。当前支持的策略有:Shuffle Grouping, Fields Grouping, All Grouping, Global Grouping, Non Grouping, Directed Grouping。
图3描述了一个由Spout、Bolt组成的DAG,即Topology。图中每个矩形框代表Spout或者Bolt,矩形框内的节点表示各个并发的Task,Task之间的“边”代表数据流——Stream。
- 可靠性
Storm提供三种级别的数据可靠性:
- 至多一次:处理的数据可能会丢失,但不会被重复处理。此情况下,系统吞吐量最大。
- 至少一次:保证数据传输可靠,但可能会被重复处理。此情况下,对在超时时间内没有获得成功处理响应的数据,会在Spout处进行重发,供后续Bolt再次处理,会对性能稍有影响。
- 精确一次:数据成功传递,不丢失,不冗余处理。此情况下,性能最差。
可靠性不同级别的选择,需要根据业务对可靠性的要求来选择、设计。例如对于一些对数据丢失不敏感的业务,可以在业务中不考虑数据丢失处理从而提高系统性能;而对于一些严格要求数据可靠性的业务,则需要使用精确一次的可靠性方案,以确保数据被处理且仅被处理一次。
- 容错
Storm是一个容错系统,提供较高可用性。表2从Storm的不同部件失效的情况角度解释其容错能力:
表2 容错能力 失效场景
说明
Nimbus失效
Nimbus是无状态且快速失效的。当主Nimbus失效时,备Nimbus会接管,并对外提供服务。
Supervisor失效
Supervisor是工作节点的后台守护进程,是一种快速失效机制,且是无状态的,并不影响正在该节点上运行的Worker,但是会无法接收新的Worker分配。当Supervisor失效时, OMS 会侦测到,并及时重启该进程。
Worker失效
该Worker所在节点上的Supervisor会在此节点上重新启动该Worker。如果多次重启失败,则Nimbus会将该任务重新分配到其他节点。
节点失效
该节点上的所有分配的任务会超时,而Nimbus会将这些Worker重新分配到其他节点。