大数据系列之Strom分布式的大数据实时计算系统
Storm是一个分布式的大数据实时计算系统,是开源的。
优点
分布式 可扩展性
高可靠性 容错性
快速 系统的设计保证了消息能得到快速的处理,zeroMQ作为其底层消息队列
高效实时
编程模型简单
可靠的消息处理
支持多种编程语言
Strom中常用的核心概念及架构
在Storm中有一些核心基本概念,包括Topology、Nimbus、Supervisor、Worker、Executor、Task、Spout、Bolt、Tuple、Stream、Stream分组(grouping)等。
Topology 一个实时计算应用程序逻辑上被封装在Topology对象中,类似Hadoop中的作业。与作业不同的是,Topology会一直运行直到显式地杀死它。
Nimbus 负责资源分配和任务调度
Supervisor 负责接受Nimbus分配的任务,启动和停止属于自己管理的Worker进程
Worker 运行具体处理组件逻辑的进程
Executor Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的Task可能会共享一个物理线程, 一个Executor中只能运行隶属于同一个Spout/Bolt的Task
Task 每一个Spout/Bolt具体要做的工作,也是各个节点之间进行分组的单位
Spout Spout获取数据源的数据,然后调用nextTuple函数,发射数据供Bolt消费
Bolt 接受Spout的数据然后执行处理的组件,Bolt可以执行过滤,函数操作,合并,写数据库等任何操作。 Bolt在接收到消息后会调用execute函数,用户可在其中执行自己想要的操作
Tuple 消息传递的基本单元
Stream 源源不断传递的Tuple组成了Stream。
Stream分组:即消息的分区(partition)方法。Storm中提供若干种实用的分组方式。包括Shuffle、Fields、All、Global、None、Direct、Local or shuffle等。
Shuffle Grouping:随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同。
Fields Grouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts,而不同的userid则会被分配到不同的Bolts。
All Grouping:广播发送,对于每一个tuple,所有的Bolts都会收到。
Global Grouping: 全局分组,这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。
Non Grouping:不分组,这个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果,有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。
Direct Grouping:直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)
使用场景
数据的实时,持续计算,分布式RPC等
喜欢就关注小编,小编天天写,你也可以进步一点点
领取专属 10元无门槛券
私享最新 技术干货