下面是0.8.0之前的表述,之后的已经基于Disruptor改造过了
这个文章演示了发射和转移tuple是怎么在storm中工作的
 
  • Worker为消息传递负责
    • 当zk中的任务出现了变化或者每个task.refresh.poll.secs都会调用refresh-connections。这个东西管理和其他的worker的连接,并且维护一个映射:task->worker
    • 提供一个transfer函数,被tasks用来发送tuples给其他的tasks。这个转移函数传入参数是task id和一个tuple,它会序列化一个tuple并且把它放入一个transfer queue。每一个worker只有一个队列。
    • 序列化是线程安全的。
    • worker使用单线程从队列中取出消息发送给其他的worker。
    • 消息发送遵循一定的协议
    • 分布式的实现是使用ZeroMQ
    • 本地模式的实现是使用内存的java queues
  • tasks接收消息的实现在本地模式和分布式模式是不一样的
    • 在本地模式,tuple直接被发送到内存队列中
    • 在分布式模式中,每一个worker监听一个唯一的tcp端口,等待传入信息,然后路由这些信息从内存到tasks,这些tcp端口称为virtual port,因为它接收[task id,message],然后路由它到真实的task中。
      • tasks监听内存ZeroMQ端口等待从虚拟端口来的消息
  • tasks为消息路由负责。一个tuple要么被发送到一个direct stream(这个task id被声明了),要么去一个regular流。在direct流中,只有bolt订阅了direct stream的时候消息才发送。在regular stream中,流分组函数被使用来决定tuple发送给哪个task id。
    • tasks有一个路由对应:{stream id}->{commponent id}->{stream grouping function}
    • 无论是direct还是regular,task-fn都返回要发送tuple的task id
    • 获取输出的task id之后,bolts和spouts使用worker提供的transfer-fn完成实际的传递tuple的工作
 
 
 
 
Storm Metrics
测量storm
Storm暴露了一个测量接口来报告整个拓扑的统计信息,它在内部使用去追踪在Nimbus UI中看到的数据:excutes和acks的数量,每个bolt的平均处理延时,worker堆的使用,等等
 
Metrics Types
Metrics只实现一个方法,getValueAndRest:做所有的剩余的工作去找到统计信息,并且重置到一个初始状态。例如MapReducer用running total除以running count得到了mean,然后初始化两者的值到0.
Storm提供给你下面的Metrics方法
  • AssignableMetric:设置metric为你提供的精确的数值。如果是个外面的值就很方便了,或者在你自己计算出统计信息的情况下。
  • CombinedMetric:是测量的通用接口可以同步升级。
  • CountMetric:给定值的running total。调用inrc()函数加1,incrBy(n)增加到指定的数值
    • MultiCountMetric:CountMetric的hashmap
  • ReducedMetric
    • MeanReducer:跟踪运行时平均值交给自己的reduce()方法
    • MultiMeanReducer:MeanReducer的hashmap

STORM_0010_Message passing implementation/消息传递的实现的更多相关文章

  1. 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?

    作者:larmbr宇链接:https://www.zhihu.com/question/35484429/answer/62964898来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  2. 【 2013 Multi-University Training Contest 6 】

    HDU 4655 Cut Pieces 假设n个数构成的总数都分成了n段,总数是n*a1*a2*...*an.但是答案显然不会那么多. 对于相邻的两个ai,ai+1,如果选择相同的颜色,那么就减少了a ...

  3. 记得12306货运系统“抢购空”编写插件--chrome交互式插件的各个部分

    --chrome交互式插件的各个部分 Chrome插件的基础知识就不多说了.随便找个新手教程就能够上手了,比如官方提供的Overview与Getting Started教程足够入门了:笔者也是现学现卖 ...

  4. ML平台_PAI参考

    阿里云机器学习PAI(Platform of Artificial Intelligence)是一款一站式的机器学习平台,包含数据预处理.特征工程.常规机器学习算法.深度学习框架.模型的评估以及预测这 ...

  5. [Distributed ML] Yi WANG's talk

    王益,分布式机器学习的践行者,他的足迹值得后来者学习. 膜拜策略: LinkedIn高级分析师王益:大数据时代的理想主义和现实主义(图灵访谈)[心路历程] 分布式机器学习的故事-王益[历史由来] 分布 ...

  6. 论文解读(KP-GNN)《How Powerful are K-hop Message Passing Graph Neural Networks》

    论文信息 论文标题:How Powerful are K-hop Message Passing Graph Neural Networks论文作者:Jiarui Feng, Yixin Chen, ...

  7. objc_msgSend消息传递学习笔记 – 消息转发

    该文是 objc_msgSend消息传递学习笔记 – 对象方法消息传递流程 的基础上继续探究源码,请先阅读上文. 消息转发机制(message forwarding) Objective-C 在调用对 ...

  8. Objective-c中的对象间的消息传递以及消息路由

    刚开始使用Objective-C时,总是习惯将对象间发送消息之间称呼为方法调用.心想,这和c#不是一回事吗?不就是调用实例方法吗,还搞个消息发送作甚,最后还不是要转化为方法的调用?通过一段时间的理解学 ...

  9. objc_msgSend消息传递学习笔记 – 对象方法消息传递流程

    在Effective Objective-C 2.0 – 52 Specific Ways to Improve Your iOS and OS X Programs一书中,tip 11主要讲述了Ob ...

随机推荐

  1. Mac OS finder : 显示和隐藏文件[夹] show and hide files or folders

    Finder默认是不显示隐藏文件[夹]的,要显示出怎么办? 要显示的话,可以GUI(graphic user interface)和CLI(command line interface)两种方式 CL ...

  2. 【原创】JDK动态代理,此次之后,永生难忘。

    动态代理,这个词在Java的世界里面经常被提起,尤其是对于部分(这里强调“部分”二字,因为有做了一两年就成大神的,实力强的令人发指,这类人无疑是非常懂动态代理这点小伎俩的)做了一两年新人来说,总是摸不 ...

  3. CentOS 7安装Gnome GUI 图形界面

    当你安装centos服务器版本的时候,系统默认是不会安装 CentOS 的图形界面程序的,比如:gnome或者kde, 那么如果你想在图形界面下工作的话,可以手动来安装CentOS Gnome GUI ...

  4. 关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法

    关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法 近期在评估使用NIOS II处理器进行项目的 ...

  5. thinkphp3.2 分页方式汇总

    //自定义分页 $page = $_GET['page'] ? $_GET['page'] : 1 ; $count = $this->Table("user")->c ...

  6. PHP高级架构技术年度大盘点

    2015年1月的最后一个周末,上海的冬季虽不如北方的雪窖冰天,但腊月的寒风也足以让人猫 在家中不愿出门.可是,在华美达酒店的一个会议室中,却人声鼎沸.春意融融,第三期商派技术沙龙正在火热进行,本期沙龙 ...

  7. 怎样新建Oracle数据库

    新建Oracle数据库三种方法:1.通过运行Oracle Database Configuration Assistant 创建配置或删除数据库(也可在命令行下输入dbca):2.用命令行的方式建立数 ...

  8. git 冲突

    git中冲突会用特殊的标记 (<<<<<<<=======>>>>>>>) 特殊标记<<<< ...

  9. Python模块学习

    6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...

  10. PIGS 分类: POJ 图论 2015-08-10 09:15 3人阅读 评论(0) 收藏

    PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18209 Accepted: 8277 Description Mir ...