Storm的并发概念

在Spouts和bolts中出现了 Executors 执行器和Tasks 任务的概念

在Toplogy 中有个workers,Toplogy运行在workers上面,Workers 上面一般指进程数

Storm集群中的一台机器 可以运行一个或多个workers process,

workers大小可以设置和toplogy无关.一个workers上面可以运行多个toplogy

workers process是进程的概念,一个workers可以执行特定toplogy上的Executors。

一个或者多个Executors可以运行在一个或者多个work进程中,每一个excutors是一个线程

每一个excutors可以跑一个或者多个Task,

Task就是真正做数据处理的,(类似于MR中自定义的mp和rd,是真正干活的)

workers是和storm集群配置有关的,在toplogy运行之前已经存在

spout和bolt统称为component。

在Storm中分为 进程层级,excutors线程层级,一个为Task层级。

层级关系。

下图所示:

一个Toplogy中运行在两个worker Process进程上面。

简单可以把work进程理解为storm集群中的每一个supervisor。一个supervision就是一个worker Process进程。

两个workers 进程运行本质上是执行Spouts和bolts。

component(Spouts和bolts),在执行的时候可以分线程执行,每一个线程称为excutors。

excutors内部跑task任务。

下图所示

绿:

蓝 :

spout组件,在运行的时候表现为task,在执行task的时候真正执行了spout的内容。

下图中每一个workers上面跑一个spout。

--------------------------

在一个work进程中跑5个excutors线程。每一个线程上面跑的是数量不等的task。这就是程序的并发。

设置Storm的并发度:

Config conf = new Config();

conf.setNumWorkers(2); // 使用两个进程

 

topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); //设置两个excutors线程

topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) //设置两个excutors线程

               .setNumTasks(4)    //设置task任务4个

               .shuffleGrouping("blue-spout");

 

topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)//设置6个excutors线程

               .shuffleGrouping("green-bolt");//默认1个task

 

StormSubmitter.submitTopology(

        "mytopology",

        conf,

        topologyBuilder.createTopology()

    );

设置work,excutors,Task有什么影响吗?

work为分布式的并行,在每一个work又会起很多excutors线程

线程回去跑component,多线程要注意并发,

excutors为什么有task呢?主要是为了明确职责,task只负责运行。

excutors做为管理者的角色,真正执行的为task。

excutors中的task 只读取自己的数据,处理的数据不一样。多个task处理完就是完整的数据。

 

 

 

 

Stream grouping分类

 

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)


 

时间: 2024-10-11 14:20:16

Storm的并发概念的相关文章

storm的并发机制

storm计算支持在多台机器上水平扩容,通过将计算切分为多个独立的tasks在集群上并发执行来实现. 一个task可以简单地理解:在集群某节点上运行的一个spout或者bolt实例. topology的组成部分:Nodes(服务器):配置在一个storm集群中的服务器,会执行topology的一部分运算.一个storm集群可以包括一个或者多个工作node; Workers(JVM虚拟机):一个NOde上相互独立运行的JVM进程.每个Node可以配置运行一个或者多个worke.一个topology

Storm原理和概念详解

Storm的集群结构 Storm与Hadoop的架构对比 主节点 工作节点 作业 Storm  Numbus  Supervisor toplogies(拓扑),死循环 Hadoop JobTracker  TaskTracker  MapReduce Job,执行完成立即结束 架构图 Nimbus 和Supervisors 之间所有的协调工作是通过 一个Zookeeper 集群. Nimbus进程和 Supervisors 进程是无法直接连接和无状态的;  所有的状态维持在Zookeeper中

storm的并发和消息保障性

Storm并发配置的优先级: defaults.yaml < storm.yaml < topology-specific configuration < internal  component-specific configuration < external component-specific configuration 通过下图来理解并行度的一些配置: 消息的可靠处理机制 如何保证消息不被丢失?即什么条件下,storm会认为从一个spout发送出来的消息被完整处理了呢? 1

Java高并发-概念

一.为什么需要并行 业务要求 http处理多个客户端请求 java虚拟机启动多个线程 进程开销比线程大的多 性能 多线程在多核系统比单线程要好的多 摩尔定律失效 二.几个重要概念 2.1 同步和异步 synchronous,asynchronous 2.2 并发和并行 concurrency,parallelism 2.3 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用.但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待. 2.4

storm的基本概念安装测试

strom简介官方网址:http://storm.apache.org/是一个免费,开源的分布式实时计算系统,使用它可以轻松实现数据流的实时处理,Strom很简单,可以用任何编程语言 storm用例:实时在线分析 机器学习,连续计算,分布式RPC,ETL等.Strom的特点:快速:基准时钟在超过一百万元组(可以理解为数据包)每秒处理的每个节点简单的设置:有可扩展性,容错性,保证了数据的处理能力,并且易于设置和操作 storm实时流式计算系统 storm集群与hadoop集群(MapReduce)

Java并发概念-1

一,同步 和 异步: 同步:调用方需要等待被调用方回应之后,才能进行下一步动作. 异步:调用方不需要等待被调用方回应,直接继续自己的动作.在未来某个时间点可能会有被调用方的回应. 二,并发 和 并行 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生. 三,临界区 每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源).每次只准许一个进程进入临界区. 进程进入临界区的调度原则是: 1.如果有若

我为什么要理解storm的一些概念

本文翻译自官方文档:http://storm.apache.org/documentation/Concepts.html. Topology,拓扑:类似MapReduce的Job.一个重要区别是MR的任务通常有结束,然而拓扑是一直运行下去的.在后端,拓扑就是一个Thrift结构体(structure),因此可以通过任何语言编写拓扑.Java提供了TopologyBuilder工具类,来帮助组装拓扑. Stream,流:流是一连串的tuple,在定义时会同时指定schema,这个schema定义

用实例理解Storm的Stream概念

原文首发在个人博客:http://zqhxuyuan.github.io/2016/06/30/Hello-Storm/ 如需转载,请注明出处,谢谢! 缘起 事情源于在看基于Storm的CEP引擎:flowmix 的FlowmixBuilder代码, 每个Bolt设置了这么多的Group, 而且declareStream也声明了这么多的stream-id, 对于只写过WordCountTopology的小白而言, 直接懵逼了,没见过这么用的啊,我承认一开始是拒绝的,每个Bolt都设置了这么多Gr

关于storm群集容错概念的简单介绍

1.当一个worker死掉会发生什么? 当一个worker死掉,那么supervisor会重新启动这个worker.如果它总是启动失败将不能发送心跳到nimbus,那么nimbus将把这个worker分配到另一台机器上. 2.当一个节点死掉将会发生什么? 分配给这台机器的任务将会超时,那么nimbus将会把任务重新分配到其他机器. 3.当Nimbus或者Supervisor实例死掉会发生什么? Nimbus和Supervisor被设计成快速失败的(当发生任何意外情况时进程将自己结束)和无状态的(