Storm 一个用来实时计算的流框架,具有高可用,低延迟,数据不丢失,分布式的特点

storm 处理数据的方式是基于消息的流水线处理,因此特别适合无状态的计算,也就是说计算单元依赖的数据全部在接受的消息中可以找到。

storm架构图

Nimbus:

storm集群的master节点,负责分发用户代码,指派给具体的supervisor节点上的worker节点,取运行topology对应的组件(spout/bolt)的task

supervisor:

负责接收nimbus分配的任务,启动和暂停属于自己管理的worker进程。通过storm配置文件中的supervisor.slots.ports配置项,可以指定在一个supervisor上最大允许多少个slot,每个slot通过端口号来唯一标识,一个端口号对应一个worker进程(如果该worker进程被启动)。

worker:

运行具体处理组件逻辑的进程。worker的任务类型只有两种,一种是spout任务,一种是bolt任务。

Task:

worker 中每一个spout/bolt的线程称为一个task。同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。(worker下面是executor,executor下面是task)

zookeeper:

用来协调nimbus和supervisor,如果supervisor因故障出现问题而无法运行topology,nimbus会第一时间感知到,并重新分配topology到其他可用的supervisor上运行

Storm编程模型

storm程序在运行过程中主要有spout和bolt这两个组件,数据源重spout开始,数据已tuple的方式发送到bolt

Topologies:

storm中运行的一个事实应用程序的名称。将spout,bolt整合起来的拓扑图。定义了spout和bolt的结合关系,并发数量,配置等等。

spout:

topology 中获取源数据流的组件,一般spout会从外部数据源读取数据然后将它们发送到拓扑中。根据需求不同,spout既可以定义为可靠的数据源,也可以定义为不可靠的数据源。可靠的数据可以再发送失败的时候重新发送该元组,以确保所有的元组都能得到正确的处理;不可靠的spout就不会再元组发送之后进行其他的任何操作。

Bolt:

拓扑中所有的数据处理均是由bolt完成的。通过数据过滤,函数处理,聚合,关联(joins),数据库交互等功能。bolt几乎能够完成任何一种数据处理需求。

Tuple:

一次消息传递的基本单元,理解为一组消息就是一个tuple

Stream: tuple的集合,标识数据的流向

Stream grouping

也就是消息是怎么划分的。

  • 随机分组(Shuffle grouping):随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。 跨服务器通信,浪费网络资源,尽量不适用

  • 无分组(None grouping):你不需要关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(如果可能)

  • 字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组总是分发到同一个任务,不同“user-id”的元组可能分发到不同的任务。  跨服务器,除非有必要,才使用这种方式。

  • 全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型需要谨慎使用。 人人都有,完全没有必要

  • 全局分组(Global grouping):全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。

  • 直接分组(Direct grouping):这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者任务接收

  • LocalOrShuffle 分组。 优先将数据发送到本地的Task,节约网络通信的资源

Streams: 一个数据流指定的在分布式环境中并行创建,处理的一组元组的无界序列

storm(一)的更多相关文章

  1. Storm如何保证可靠的消息处理

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文主要翻译自Storm官方文档Guaranteeing messag ...

  2. Storm

    2016-11-14  22:05:29 有哪些典型的Storm应用案例? 数据处理流:Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去.不像其它的流处理系统,Storm不 ...

  3. Storm介绍(一)

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 内容简介 本文是Storm系列之一,介绍了Storm的起源,Storm ...

  4. 理解Storm并发

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 注:本文主要内容翻译自understanding-the-parall ...

  5. Storm构建分布式实时处理应用初探

    最近利用闲暇时间,又重新研读了一下Storm.认真对比了一下Hadoop,前者更擅长的是,实时流式数据处理,后者更擅长的是基于HDFS,通过MapReduce方式的离线数据分析计算.对于Hadoop, ...

  6. Storm内部的消息传递机制

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 一个Storm拓扑,就是一个复杂的多阶段的流式计算.Storm中的组件 ...

  7. Storm介绍(二)

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是Storm系列之一,主要介绍Storm的架构设计,推荐读者在阅读 ...

  8. Storm介绍及与Spark Streaming对比

    Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...

  9. 交易系统使用storm,在消息高可靠情况下,如何避免消息重复

    概要:在使用storm分布式计算框架进行数据处理时,如何保证进入storm的消息的一定会被处理,且不会被重复处理.这个时候仅仅开启storm的ack机制并不能解决上述问题.那么该如何设计出一个好的方案 ...

  10. 由提交storm项目jar包引发对jar的原理的探索

    序:在开发storm项目时,提交项目jar包当把依赖的第三方jar包都打进去提交storm集群启动时报了发现多个同名的文件错误由此开始了一段对jar包的深刻理解之路. java.lang.Runtim ...

随机推荐

  1. Linux中的zip与scp

    现在只是学会基本操作,不深究各个参数的含义 一般操作目录时,都有一个-r代表递归操作整个目录下的所有内容 压缩一个目录test到test.zip zip -r test test.zip 解压test ...

  2. BZOJ 2330 - 差分约束系统

    传送门 题目分析 差分约束 这里做个简单介绍:形如\(x_i - x_j >= d\)的不等式,可以联想到我们求最短路时\(d_v <= d_u + len\),则上式可以变形为\(x_i ...

  3. Objective-C 中的Runtime的使用

    Runtime的使用 一直以来,OC被大家冠以动态语言的称谓,其实是因为OC中包含的runtime机制.Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平 ...

  4. mac在终端打开应用程序

    今天研究了下mac终端的启动流程.以下以sublime为例,介绍怎么在mac的终端中加入app启动方法. 方法1 :使用"open -a /Applications/Sublime\ Tex ...

  5. 可以左右移动横向无缝滚动的JS图片展示代码

    在酷站网站下的,具体路径忘了,稍微改了一下,让它看起来像组滑动 1)被引用的js文件ScrollPic.js ?){){i+=l.length;)I=document.cookie.length;o= ...

  6. wpf绑定全局静态变量(mvvm)

    原文 wpf绑定全局静态变量(mvvm) 在实际的开发中,有一些集合或者属性可能是全局的,比如当你做一个oa的时候,可能需要展示所有的人员,这时这个所有的人员列表显然可以作为全局参数,比如这里有一个全 ...

  7. hx计算机基础

    参考:http://python.jobbole.com/82294/ https://www.jianshu.com/p/aed6067eeac9 1. 操作系统基础题 1)在32位操作系统下,系统 ...

  8. android中滑动SQLite数据库分页加载

    今天用到了android中滑动SQlit数据库分页加载技术,写了个测试工程,将代码贴出来和大家交流一下: MainActivity package com.example.testscrollsqli ...

  9. 升级cocoapods 0.36.0之后,解决更新的部分依赖库,不是最新版本号的问题

    在升级到cocoapods 0.36.0之后,使用原本podfile配置,在又一次运行pod install之后,一些依赖库的版本号,低于github上的最新版本号.可依照下列配置.指定git,强制使 ...

  10. 给 Web 开发人员推荐的通用独立 UI 组件(一)(按钮很不错)

    现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...