Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组
不多说,直接上干货!
Stream消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列。
Stream Grouping 消息流组是用来定义一个流如何分配到Tuple到Bolt。
Stream消息流和Stream Grouping消息流组
Storm核心的抽象概念是“流”。流是一个分布式并行创建和处理的无界的连续元组(Tuple)。流通过给流元组中字段命名来定义。在默认情况下,元组可以包含整型、长整型、短整型、字节、字符串、双精度浮点数、单精度浮点数、布尔型和字节数组。
Stream消息流
Stream消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列,这些Tuple以分布式的方式并行地创建和处理。源源不断传递的元组Tuple就组成了流Stream,定义消息流主要是定义消息流中的Tuple。Tuple的定义在前面的博文已经做了详细介绍,本博文不再累述。消息流Tuple中的每个字段都有一个名字,并且不同Tuple对应字段的类型必须相同。两个Tuple的第一个字段的类型必须相同,第二个字段的类型必须相同,但是第一个字段和第二个字段可以有不同的类型。
每个消息流在定义时都会分配一个ID,因为单向消息流很普遍,OutputFieldsDeclarer定义了一些方法可以定义一个流而不用指定其ID。在这种情况下,该流有一个默认的ID。
Storm将每个待处理或者新产生的Tuple封装成“消息”,而一个消息流(Stream)则是一个没有边界的Tuple序列,而这些Tuple会以一种分布式的方式被并行地创建和处理。
Stream Grouping消息流组
定义Topology的其中一步是定义每个Bolt接受何种流作为输入。Stream Grouping(消息流组)就是用来定义一个流如何分配Tuple到Bolt。Storm包括6种流分组类型。
1)随机分组(Shuffle Grouping):随机分发元组到Bolt的任务,保证每个任务获得相等数量的元组。
2)字段分组(Fields Grouping):根据指定字段分割数据流并分组。例如,根据“user-id”字段,具有该字段的Tuple被分到相同的Bolt,不同的“user-id”值则会被分配到不同的Bolt。
3)全部分组(All Grouping):对于每一个Tuple来说,所有的Bolt都会收到,所有的Tuple被复制到Bolt的所有任务上,需小心使用该分组。
4)全局分组(Global Grouping):全部的流都分配到Bolt的同一个任务,就是分配给ID最小的Task。
5)无分组(None Grouping):不分组的含义是,流不关心到底谁会收到它的Tuple。目前无分组等效于随机分组,不同的是Storm将把无分组的Bolt放到订阅Bolt或Spout的同一线程中执行(在可能实现的前提下)。
6)直接分组(Direct Grouping):这是一个特别的分组类型。元组生产者决定元组由哪个元组消费者任务接收。该分组仅能被声明为direct stream的流使用。元组必须通过emitDirect方法直接发射。Bolt获取消费者任务ID,可以使用已提供的TopologyContext类或保持引用OutputCollector类的emit方法的输出,元组发送后返回任务ID列表。
更多具体,见博客
Storm编程入门API系列之Storm的Topology的stream grouping
Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组相关推荐
- Storm概念学习系列之Topology拓扑
不多说,直接上干货! Hadoop 上运行的是 MapReduce 作业,而在 Storm 上运行的是拓扑 Topology,这两者之间是非常不同的.一个关键的区别是:一个MapReduce 作业 ...
- Storm概念学习系列之storm-starter项目(完整版)(博主推荐)
这是书籍<从零开始学Storm>赵必厦 2014年出版的配套代码! storm-starter项目包含使用storm的各种各样的例子.项目托管在GitHub上面,其网址为: http:// ...
- Storm概念学习系列之storm的特性
不多说,直接上干货! storm的特性 Storm 是一个开源的分布式实时计算系统,可以简单.可靠地处理大量的数据流. Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快 ...
- Storm概念学习系列之Task任务
每一个Spout/Bolt的线程称为一个Task. Task任务 Task是运行Spout或Bolt的单元,每一个Spout/Bolt的线程称为一个Task. 在Storm 0.8及之后的版本中,Ta ...
- storm是java还是python_Storm概念学习系列之什么是实时流计算?
不多说,直接上干货! 什么是实时流计算? 1.实时流计算背景 2.实时计算应用场景 3.实时计算处理流程 4.实时计算框架 什么是实时流计算? 所谓实时流计算,就是近几年由于数据得到广泛应用之后,在数 ...
- Zookeeper概念学习系列之分布式事务
不多说,直接上干货! 初学者来说,肯定会有这么一个疑问.为什么会在zookeeper里牵扯到分布式事务? zookeeper到底是什么? zookeeper实际上是yahoo开发的,用于分布式中一致性 ...
- 跟我学 Java 8 新特性之 Stream 流(四)并行流
转载自 跟我学 Java 8 新特性之 Stream 流(四)并行流 随着对流API认识的慢慢深入,本章我们要讨论的知识点是流API里面的并行流了. 在开始讨论并行流之前,我先引发一下大家的思考, ...
- 从“消息队列”到“服务总线”和“流处理平台”
作者简介 Gavin,程序员.软件架构师.企业架构师,关注智能制造. 本文是专栏<智能制造系统架构>中的文章,其它文章请参阅入坑智能制造系统架构. 消息队列是分布式系统中重要的组件,也是企 ...
- Stream流、FiLe和IO流、IO流(字节流-拷贝文件_和_字符流-读取文本中的数据写入文本文件中)9-10-11
package com.streamdemo; import java.util.ArrayList; import java.util.List; /*** 体验Stream流** 创建一个集合,存 ...
最新文章
- 二元关系在计算机中的应用(数据库为主),数据库技术复习题答案 选择题
- ubuntu 下非交互式执行远程shell命令
- 【转】为什么有天线的路由器信号还不如没有天线的路由
- Java怎么配置环境变量?
- 判断对象是否存在某个属性
- 定题信息服务是从什么角度_信息管理练习题2
- mysql优化 坑_mysql之我们终将踩过的坑(优化)
- HTML5的little,HTML 5
- 修改定时任务不重启项目,SpringBoot如何实现?
- ARP 协议 理解
- qmainwindow 标题栏_QMainWindow菜单栏和工具栏
- python2和python3的区别 print-Python2与Python3中print用法总结
- 关于领域模型与技术架构的关系的思考
- 行业精英解答十大游戏关卡设计问题
- 百度地图根据经纬度计算距离php,百度地图两者经纬度距离计算
- Python 分词 第三方模块
- css5导弹,世界六大洲际导弹排行榜
- delphi网络时间校对
- 【办公常用软件】万彩办公大师教程丨PDF OCR 帮助文档
- php两个并排的按钮,如何并排设置2个按钮
热门文章
- php正则表达式 什么,php正则表达式是什么?(代码实例)
- 车险赔付率分析报告_机动车辆保险赔付率高的原因分析及对策研究
- echarts里面的参数解释_SPMSM控制:传统PI速度环参数的整定
- usb 键盘码表_键盘鼠标对应码表-delphi键值
- vb.net label 不要自动换行_自动驾驶小车——(四)数据采集
- activeMQ 的kahadb存储引擎分析
- Unity 5.x---00使用重力
- CentOS 6.5使用本地光盘做yum源
- Struts2,在Action中使用session
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码