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实时处理系统由以下几个关键概念组成
拓扑 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)
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性能。
原文:https://www.cnblogs.com/huzicourenao/p/11079035.html