storm的简单了解

storm系统架构

storm 是什么的:分布式 && 实时 计算系统

  • Nimbus:负责资源分配和任务调度。

  • Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。

  • Worker:运行具体处理组件逻辑的进程。

  • Task:worker中每一个spout/bolt的线程称为一个task。同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。

  • storm架构中使用Spout/Bolt编程模型来对消息进行流式处理。消息流是storm中对数据的基本抽象,一个消息流是对一条输入数据的封装,源源不断输入的消息流以分布式的方式被处理,Spout组件是消息生产者,是storm架构中的数据输入源头,它可以从多种异构数据源读取数据,并发射消息流,Bolt组件负责接收Spout组件发射的信息流,并完成具体的处理逻辑。在复杂的业务逻辑中可以串联多个Bolt组件,在每个Bolt组件中编写各自不同的功能,从而实现整体的处理逻辑。

storm的计算模型

storm实时处理系统由以下几个关键概念组成

拓扑 Topoloies 消息流 Streams 消息源 Spouts 消息处理单元 Bolt

消息分发策略 Stream groupings 任务 Tasks 消息进程 Workers

拓扑topolpgy

一个实时计算应用程序的逻辑在Storm里面被封装到topology对象里面,这个对象称为:计算拓扑。

消息源Spout

消息源是消息流的源头,负责生产数据并将数据(元组)送入消息流。

消息处理单元Bolt

Bolt中封装了所有消息处理的逻辑:过滤,聚合,查询数据库等各种业务逻辑

消息分发策略Stream groupings

随机分组,直接分组,全局分组,定义分组,广播,不分组

任务Tasks

每个Spout和Bolt会被当作很多任务在整个集群里面执行。

工作进程

Topology可能会在一个或者多个工作进程里面执行,每个工作进程执行整个topology的一部分

Tuple 元组

Stream中最小数据组成单元

 

Topology – DAG有向无环图的实现

对于Storm实时计算逻辑的封装

即,由一系列通过数据流相互关联的Spout、Bolt所组成的拓扑结构

生命周期:此拓扑只要启动就会一直在集群中运行,直到手动将其kill,否则不会终止

Stream – 数据流

从Spout中源源不断传递数据给Bolt、以及上一个Bolt传递数据给下一个Bolt,所形成的这些数据通道即叫做Stream

Stream声明时需给其指定一个Id(默认为Default)

 

详述什么是storm的流分组?有哪几种?如何分组的?

Shuffle grouping(随机分组):这种方式会随机分发tuple给bolt的各个task,每个bolt实例接收到的相同数量的tuple。

 

Fields grouping(按字段分组):根据指定字段的值进行分组。比如说,一个数据流根据“word”字段进行分组,所有具有相同“word”字段值的tuple会路由到同一个bolt的task中。

 

All grouping(全复制分组):将所有的tuple复制后分发给所有bolt task。每个订阅数据流的task都会接收到tuple的拷贝。

Globle grouping(全局分组):这种分组方式将所有的tuples路由到唯一一个task上。Storm按照最小的task ID来选取接收数据的task。

 

None grouping(不分组):在功能上和随机分组相同,是为将来预留的。

 

Direct grouping(指向型分组):数据源会调用emitDirect()方法来判断一个tuple应该由哪个Storm组件来接收。只能在声明了是指向型的数据流上使用。

 

Local or shuffle grouping(本地或随机分组):和随机分组类似,但是,会将tuple分发给同一个worker内的bolt task(如果worker内有接收数据的bolt task)。其他情况下,采用随机分组的方式。取决于topology的并发度,本地或随机分组可以减少网络传输,从而提高topology性能。

猜你喜欢

转载自www.cnblogs.com/huzicourenao/p/11079035.html