《Storm企业级应用:实战、运维和调优》——3.5 Stream消息流和Stream Grouping消息流组

简介:

本节书摘来自华章计算机《Storm企业级应用:实战、运维和调优》一书中的第3章,第3.5节,作者:马延辉 陈书美 雷葆华著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5 Stream消息流和Stream Grouping消息流组

Storm核心的抽象概念是“流”。流是一个分布式并行创建和处理的无界的连续元组(Tuple)。流通过给流元组中字段命名来定义。在默认情况下,元组可以包含整型、长整型、短整型、字节、字符串、双精度浮点数、单精度浮点数、布尔型和字节数组。
3.5.1 Stream消息流
消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列,这些Tuple以分布式的方式并行地创建和处理。定义消息流主要是定义消息流中的Tuple。Tuple的定义在3.1节已经做了详细介绍,本章节不再累述。消息流Tuple中的每个字段都有一个名字,并且不同Tuple对应字段的类型必须相同。两个Tuple的第一个字段的类型必须相同,第二个字段的类型必须相同,但是第一个字段和第二个字段可以有不同的类型。
每个消息流在定义时都会分配一个ID,因为单向消息流很普遍,OutputFieldsDeclarer定义了一些方法可以定义一个流而不用指定其ID。在这种情况下,该流有一个默认的ID。
3.5.2 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列表。

相关文章
|
2月前
|
消息中间件 存储 数据库
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
88370 0
|
2月前
|
消息中间件 存储 数据库
深度剖析 RocketMQ 5.0,流存储:流场景的诉求是什么?
本文将从使用的角度出发,来更详细的展示一下流存储的场景,看看它和业务消息的场景有哪些区别。 RocketMQ 5.0 面向流存储的场景,提供了哪些特性。再结合两个数据集成的案例,来帮助大家了解流存储的用法。
3368 2
|
4月前
|
消息中间件 分布式计算 Kafka
Spark与Kafka的集成与流数据处理
Spark与Kafka的集成与流数据处理
|
5月前
|
消息中间件 存储 监控
Kafka Streams:深度探索实时流处理应用程序
Apache Kafka Streams 是一款强大的实时流处理库,为构建实时数据处理应用提供了灵活且高性能的解决方案。本文将深入探讨 Kafka Streams 的核心概念、详细原理,并提供更加丰富的示例代码,以帮助大家深入理解和应用这一流处理框架。
|
8月前
|
消息中间件 存储 负载均衡
流平台 Kafka
流平台 Kafka
58 0
|
9月前
|
存储 Java
Stream流式编程
Stream流式编程
104 0
|
12月前
|
消息中间件 Java Kafka
「Spring和Kafka」Kafka深挖第4部分:事件流管道的连续交付
「Spring和Kafka」Kafka深挖第4部分:事件流管道的连续交付
|
消息中间件 数据采集 运维
告别Kafka Stream,让轻量级流处理更加简单
还在花精力去选型Kafka组件去做清洗转化?来试试Kafka ETL任务功能!
148 0
告别Kafka Stream,让轻量级流处理更加简单
|
消息中间件 存储 Java
RocketMQ Streams拓扑构建与数据处理过程
作为一套全新的流式处理框架,RocketMQ Streams 如何实现流计算拓扑图构建呢?一起来了解下它的实现原理以及数据流转过程和过程中的状态变化吧~
123 0
RocketMQ Streams拓扑构建与数据处理过程
|
消息中间件 云安全 缓存
RocketMQ Streams 1.1.0: 轻量级流处理再出发
作为一套全新的流式处理框架,RocketMQ Streams 如何实现流计算拓扑图构建呢?一起来了解下它的实现原理以及数据流转过程和过程中的状态变化吧~
169 0
RocketMQ Streams 1.1.0: 轻量级流处理再出发

热门文章

最新文章