Why use Storm?

Apache Storm是一个免费的开源的分布式实时计算系统。Storm使得可靠的实时处理无边界的数据量变得很容易,就如同Hadoop做批处理那样。Storm很简单,可以用任意的编程语言。

Storm有许多使用案例:实时分析、在线机器学习、持续的计算、分布式RPC、ETL等等。Storm很快速:每个节点每秒钟可以处理一百万个元组。它是可伸缩的、容错的,保证你的数据将会被处理,并且很容易操作。

Storm集成了队列和数据库技术。一个Storm拓扑结构以任意复杂的方式消费并处理数据流,在计算的每一个阶段会重新分区数据流。

Concepts

Topologies

一个实时应用程序的逻辑被打包成一个Storm topology。Storm topology和MapReduce的Job很类似。一个最关键的不同在于,一个MapReduce的Job最终会结束,而一个topology是永远运行的(除非你手动杀死它)。一个topology是一个由spouts和bolts以及将它们连接起来的stream grouping构成的图。

Streams

Stream是Storm中的核心抽象。一个Stream是一个无边界的元组序列。Stream是由元组中的命名字段被定义的。默认情况下,元组可以包含integers, longs, shorts, bytes, strings, doubles, floats, booleans, and byte arrays。你也可以定义自己的序列化方式。

每一个Stream在被声明的时候都会给定一个id。

Spouts

在一个topology中,spouts是流的来源。一般而言,spout从外部的源中读取元组,并将其发送到topology中。Spout可以是可靠的,也可以是不可靠的。一个可靠的spout是如果在Storm中处理失败的话它会重新放一个元组,而不可靠的spout在它发送这个元组以后就忘记它了。

Spouts可以发送到一个或者多个Stream。为了这样做,在声明多个stream的时候OutputFieldsDeclarer的declareStream方法。

Spout中的主要方法是nextTuple。nextTuple发送一个新的元组到topology中或者没有新的元组的时候简单的返回。另一个重要的方法是ack和fail。

Bolts

Topologies中的所有处理都是由Bolts来做的。Bolts可以做许多事情,比如:过滤、聚集、连接数据等等。

Bolts可以做简单的流转换,复杂的流转换通常需要多步,因此也需要多个bolts。

当你声明了一个bolt的输入流的时候,你总是会订阅来自其它组件的特别的流。如果你想订阅所有组件的流,那么你必须一个一个的订阅。

bolt的主要方法是execute

Stream groupings

一个stream grouping是定义流应该怎样被分区到bolt的task中去。

  1. Shuffle grouping:元组被随机分配到task中去,因此每个bolt可以保证获得相等数量的元组
  2. Fields grouping:按特定的字段分区。例如,"user-id"相同的元组总是被分到相同的task中去
  3. Partial Key grouping:跟Fields grouping类似,只不过会考虑下游的bolts的负载均衡
  4. All grouping:流会被复制,并且分发给所有的bolt
  5. Global grouping:整个流只进入到一个bolt的task。特别的,将进入到id最小的那个task
  6. None grouping:你不关心怎么分组。等价于Shuffle grouping
  7. Direct grouping:元组的生产者决定哪些消费者任务可以收到这个元组
  8. Local or shuffle grouping:如果目标bolts在相同的worker中有一个或者多个task,元组将会被随机分配到这些任务中

Reliability

Storm保证每个spout元组被完全处理。这是通过跟踪由每个元组触发的元组树实现的

Tasks

每一个spout和bolt都执行很多tasks,每一个task对应执行的一个线程,stream grouping定义元组怎么从一个task到另一个task。

Workers

Topologies执行一个或多个worker进程。每个worker进程是一个物理的JVM。

参考 http://storm.apache.org/index.html

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. easyui-combobox的option选项为true与false时的问题

    如题,我们使用easyui-combobox,当我们的选择项为true与false时,即选择是否,后台返回一个boolean类型的变量,那么这时候,通过form表单进行反显会出现这样的问题:表单里ea ...

  2. 【转】Android总结篇系列:Activity启动模式(lauchMode)

    [转]Android总结篇系列:Activity启动模式(lauchMode) 本来想针对Activity中的启动模式写篇文章的,后来网上发现有人已经总结的相当好了,在此直接引用过来,并加上自己的一些 ...

  3. 爬取QQ音乐(讲解爬虫思路)

    一.问题描述: 本次爬取的对象是QQmusic,为自己后面做django音乐网站的开发获取一些资源. 二.问题分析: 由于QQmusic和网易音乐的方式差不多,都是讲歌曲信息放入到播放界面播放,在其他 ...

  4. hbase常用操纵操作——增删改查

    查询某个资金账户的信息 get 'dmp:hbase_tags','资金账号' 创建表 create 'emp', 'personal data', 'professional data' 在HBas ...

  5. LCD调试

    (1) 液晶显示模式 并行:MCU接口.RGB接口.Vysnc接口 串行:SPI接口.MDDI接口 (2) 屏幕颜色 实质上即为色阶的概念.色阶是表示手机液晶显示屏亮度强弱的指数标准,也就是通常所说的 ...

  6. vue数据更新UI不刷新显示解决方案

    vue比较常见的坑就是数据(后台返回)更新了,但是UI界面并没有更新,常见于以下情况: 一.数据为数组时1.通过数组索引修改数组元素例如: 此时UI数据并不会刷新 2.修改数组长度时: 解决方案: 如 ...

  7. jQuery-实现图片轮播

    html部分: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <ti ...

  8. 可参数化的带优先级的数据选择器的FPGA实现方式探讨

    在FPGA设计中,大部分情况下我们都得使用到数据选择器.并且为了设计参数化,可调,通常情况下我们需要一个参数可调的数据选择器,比如M选1,M是可调的参数. 如果,数据选择器是不带优先级的,我们可以使用 ...

  9. window下安装itchat库

    itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. pip 是 Python 著名的包管理工具,在 Python 开发中必不可少. 1.安装 检查你有没有安装了pip:运行 ...

  10. Python学习笔记-基础2

    1.列表list 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 1.定义列表 names = ["Ronaldo","Messi" ...