2. Storm消息流

1. 概念

消息流是storm里面的最关键的抽象。

一个消息流是一个没有边界的tuple序列, 而这些tuples会被以一种分布式的方式并行地创建和处理。

对消息流的定义主要是对消息流里面的tuple的定义, 我们会给tuple里的每个字段一个名字。 并且不同tuple的对应字段的类型必须一样。

也就是说: 两个tuple的第一个字段的类型必须一样, 第二个字段的类型必须一样, 但是第一个字段和第二个字段可以有不同的类型。

在默认的情况下, tuple的字段类型可以是: integer, long, short, byte, string, double, float, boolean和byte array。

你还可以自定义类型 — 只要你实现对应的序列化器。

2. 消息分发策略:Stream groupings

  • 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)
  • Local or shuffle grouping:如果目标bolt有一个或者多个task在同一个工作进程中,tuple将会被随机发生给这些tasks。否则,和普通的Shuffle Grouping行为一致。

来自为知笔记(Wiz)

时间: 2024-10-24 16:24:10

2. Storm消息流的相关文章

Storm系列三: Storm消息可靠性保障

Storm系列三: Storm消息可靠性保障 在上一篇 Storm系列二: Storm拓扑设计 中我们已经设计了一个稍微复杂一点的拓扑. 而本篇就是在上一篇的基础上再做出一定的调整. 在这里先大概提一下上一篇的业务逻辑, 我们会不断收到来自前端的消息,消息包含消息的发送时间,消息内容,结束标识, 消息的发送者, SessionId等其他信息, 我们需要做的事情是当接收到消息之后,根据SessionId判断是否属于同一消息, 如果是的话将内容拼接, 如果结束标识为 true, 表示会话已结束,则存

Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)

最近搞一个项目,需要用到类似于新浪微博的消息流,即每一项有文字.有九宫格图片,因此这就涉及到ListView或者ScrollView嵌套GridView的问题.其中GridView的高度问题在网上都很容易找到答案,即覆写onMeasure方法,然后设置高度的MeasureSpec.但是宽度问题确实没有什么资料,这里所说的宽度问题是比如GridView的列数为3,那么即使只有一张图片,gridview的宽度也是match_parent的,导致用户点击在图片范围外但是在gridview范围内时Lis

Storm消息可靠处理机制

在很多应用场景中,分布式系统的可靠性保障尤其重要.比如电商平台中,客户的购买请求需要可靠处理,不能因为节点故障等原因丢失请求:比如告警系统中,产生的核心告警必须及时完整的知会监控人员,不能因为网络故障而丢失数据. Storm消息可靠性保障是Storm核心特性之一,其中消息树的跟踪管理机制是Storm核心算法之一,本文将详细介绍Storm消息可靠处理机制.我们从Storm初探中的例子入手. 一.消息处理流程 1. Spout节点 (1) Spout接收到一个文本消息: msg1 刘备 关羽 张飞

MQTT协议笔记之消息流

前言 前面的笔记已把所有消息类型都过了一遍,这里从消息流的角度尝试解读一下. 网络故障 在任何网络环境下,都会出现一方连接失败,比如离开公司大门那一刻没有了WIFI信号.但持续连接的另一端-服务器可能不能立即知道对方已断开.类似网络异常情况,都有可能在消息发送的过程中出现,消息发送出去,就丢失了. MQTT协议假定客户端和服务器端稳定情况一般,彼此之通信管道不可靠,一旦客户端网络断开,情况就会很严重,很难恢复原状. 但别忘记,很多客户端会有永久性存储设备支持,比如闪存ROM.存储卡等,在通信出现

Storm消息可靠性的保障机制

参考[并发编程网]的Storm官方教程翻译 以WordCountToPology为例: // 构造Topology TopologyBuilder builder = new TopologyBuilder(); builder.setSpout(SPOUT_ID,new SentenceSpout(), 2)// 指定 Spout ,2 指的是使用2个executor来运行spout .setNumTasks(4);//指定tasks的数量 // 指定 SentenceSpout 向Split

Storm 系列(一)—— Storm和流处理简介

一.Storm 1.1 简介 Storm 是一个开源的分布式实时计算框架,可以以简单.可靠的方式进行大数据流的处理.通常用于实时分析,在线机器学习.持续计算.分布式 RPC.ETL 等场景.Storm 具有以下特点: 支持水平横向扩展: 具有高容错性,通过 ACK 机制每个消息都不丢失: 处理速度非常快,每个节点每秒能处理超过一百万个 tuples : 易于设置和操作,并可以与任何编程语言一起使用: 支持本地模式运行,对于开发人员来说非常友好: 支持图形化管理界面. 1.2 Storm 与 Ha

storm 消息确认机制及可靠性

worker进程死掉 在一个节点 kill work进程 比方 kill 2509  对work没有影响 由于会在其它节点又一次启动进程运行topology任务 supervisor进程死掉 supervisor进程kill掉 对work进程没有影响  由于他们是互相独立的! . nimbus进程死掉(存在HA的问题) nimbus假设死掉 整个任务挂掉 存在单点故障问题!(hadoop2有ha!.!!.! storm没有ha高可用) 节点宕机(和supervisor是一样的) ack/fail

storm 消息的可靠处理机制——Ack整个tuple树异或

消息的可靠处理机制 Storm内部通过一种巧妙的异或算法判读每个tuple是否被正确完整的处理. Spout的一个Task创建一个Tuple时,即在Spout的nextTuple()方法中实现从特定数据源读取数据的处理逻辑中,会与Acker进行通信,向Acker发送消息,Acker保存该Tuple对应信息:{:spout-task task-id :val ack-val)}. Bolt在emit一个新的子Tuple时,会保存子Tuple与父Tuple的关系. 在Bolt中进行ack时,会计算出

storm的流分组

用的是ShuffleGrouping分组方式,并行度设置为3 这是跑下来的结果 参考代码StormTopologyShufferGrouping.java package yehua.storm; import java.util.Map; import org.apache.storm.Config;import org.apache.storm.LocalCluster;import org.apache.storm.StormSubmitter;import org.apache.stor